删除最后一个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.Joinforeach都比这个更好,方法慢得多
  • 不需要删除最后一个,因为它从不附加
  • 增量运算符( += )可以方便地附加到string
  • .ToString()是不必要的,因为它在连接非string时被自动调用
  • 处理大string时,应考虑使用StringBuilder而不是连接string