删除最后一个string
我正在检索链接到数据库的列表中的很多信息。
我想为连接到网站的人创build一个组的string。
我用这个testing…但是这不是dynamic的,所以它是非常糟糕的:
string strgroupids = "6";  我现在想用这个。 但是返回的string类似于1,2,3,4,5, 
 groupIds.ForEach((g) => { strgroupids = strgroupids + g.ToString() + ","; strgroupids.TrimEnd(','); }); strgroupids.TrimEnd(new char[] { ',' }); 
 我想删除后, 5但它绝对不能工作..有人可以帮助我吗? 
 strgroupids = strgroupids.Remove(strgroupids.Length - 1); 
MSDN:
String.Remove(Int32)已:
从指定位置开始删除从该string开始的所有字符,并继续到最后一个位置
那么这样做呢?
 strgroupids = string.Join( ",", groupIds ); 
更清洁。
 它会在groupIds所有元素之间添加一个',' ,但是不会在末尾加上',' 。 
 在C#中的string是不可改变的。 当你在你的代码中,你做strgroupids.TrimEnd(','); 或strgroupids.TrimEnd(new char[] { ',' });  strgroupidsstring不被修改 。 
 你需要做一些像strgroupids = strgroupids.TrimEnd(','); 代替。 
从这里引用:
string是不可变的 – string对象的内容在创build对象之后是不能改变的,尽pipe语法使得它看起来好像你可以做到这一点。 例如,编写这段代码时,编译器实际上会创build一个新的string对象来保存新的字符序列,并将该新的对象分配给b。 string“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(","); 
删除任何结尾的逗号:
 while (strgroupids.EndsWith(",")) strgroupids = strgroupids.Substring(0, strgroupids.Length - 1); 
 但是,这是倒退的,你写的代码,首先添加逗号。 你应该使用string.Join(",",g)来代替,假设g是一个string[] 。 给它一个比g更好的名字! 
作为为每个项目添加逗号的替代方法,您可以使用String.Join:
 var strgroupids = String.Join(",", groupIds); 
这将在数组中的每个元素之间添加分隔符(本例中为“,”)。
 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); 
没有结束子串:
 string strgroupids = groupIds.Aggregate(string.Empty, (p, q) => (p != string.Empty ? p + "," + q : q.ToString())); 
除了sll的解决scheme之外:如果最后还有一些空白,最好修整一下string。
 strgroupids = strgroupids.Remove(strgroupids.Trim().Length - 1); 
  string.Join更好,但如果你真的想要一个LINQ ForEach : 
 var strgroupids = string.Empty; groupIds.ForEach(g => { if(strgroupids != string.Empty){ strgroupids += ","; } strgroupids += g; }); 
一些说明:
-   string.Join和foreach都比这个更好,方法慢得多
-  不需要删除最后一个,因为它从不附加
-  增量运算符( +=)可以方便地附加到string
-   .ToString()是不必要的,因为它在连接非string时被自动调用
-  处理大string时,应考虑使用StringBuilder而不是连接string