我在一个列表中检索了很多信息,链接到一个数据库,我想创建一个组的字符串,为连接到网站的人。

我用这个来测试,但它不是动态的,所以它真的很糟糕:

string strgroupids = "6";

我现在想用这个。但是返回的字符串是1 2 3 4 5,

groupIds.ForEach((g) =>
{
    strgroupids = strgroupids  + g.ToString() + ",";
    strgroupids.TrimEnd(',');
});

strgroupids.TrimEnd(new char[] { ',' });

我想删除5后面的,但这显然不行。


当前回答

删除任何尾随逗号:

while (strgroupids.EndsWith(","))
    strgroupids = strgroupids.Substring(0, strgroupids.Length - 1);

不过,这是反向的,您首先编写了添加逗号的代码。你应该使用string. join (",",g)代替,假设g是一个字符串[]。给它取个比g更好的名字!

其他回答

string strgroupids = string.Empty;

groupIds.ForEach(g =>
{
    strgroupids = strgroupids + g.ToString() + ",";
});

strgroupids = strgroupids.Substring(0, strgroupids.Length - 1);

注意,在这里使用ForEach通常被认为是“错误的”(例如http://blogs.msdn.com/b/ericlippert/archive/2009/05/18/foreach-vs-foreach.aspx)

使用一些LINQ:

string strgroupids = groupIds.Aggregate(string.Empty, (p, q) => p + q + ',');
strgroupids = strgroupids.Substring(0, str1.Length - 1);

没有end-substringing:

string strgroupids = groupIds.Aggregate(string.Empty, (p, q) => (p != string.Empty ? p + "," + q : q.ToString()));

c#中的字符串是不可变的。当在代码中执行strgroupids.TrimEnd(',');或strgroupids。TrimEnd(new char[] {','});strgroupids字符串没有被修改。

您需要执行类似strgroupids = strgroupids. trimend (',');代替。

这里引用如下:

字符串是不可变的——字符串对象的内容不能 对象创建后更改,尽管语法使其更改 表现得好像你能做到。例如,当你写这段代码时, 编译器实际上创建了一个新的字符串对象来保存new 字符序列,新对象被赋值给b 字符串“h”就可以进行垃圾收集了。

添加一个扩展方法。

public static string RemoveLast(this string text, string character)
{
    if(text.Length < 1) return text;
    return text.Remove(text.ToString().LastIndexOf(character), character.Length);
}

然后使用:

yourString.RemoveLast(",");

这样做怎么样

strgroupids = string.Join( ",", groupIds );

干净多了。

它将在groupIds中的所有元素之间添加一个“,”,但不会在末尾添加“,”。

strgroupids = strgroupids.Remove(strgroupids.Length - 1);

MSDN:

String.Remove (Int32): 从此字符串中删除从指定位置开始的所有字符 定位并继续到最后一个位置