C#语法 – 通过逗号将string拆分为数组,转换为通用列表和逆序

这是什么正确的语法:

IList<string> names = "Tom,Scott,Bob".Split(',').ToList<string>().Reverse(); 

我在搞什么? TSource是什么意思?

问题是你打电话List<T>.Reverse()返回void

你可以做:

 List<string> names = "Tom,Scott,Bob".Split(',').ToList<string>(); names.Reverse(); 

要么:

 IList<string> names = "Tom,Scott,Bob".Split(',').Reverse().ToList<string>(); 

后者更昂贵,因为反转任意IEnumerable<T>涉及缓冲所有数据,然后产生所有的数据 – 而List<T>可以完成所有的“就地”反转。 (这里的区别在于它调用了Enumerable.Reverse<T>()扩展方法,而不是List<T>.Reverse()实例方法。

效率更高,但你可以使用:

 string[] namesArray = "Tom,Scott,Bob".Split(','); List<string> namesList = new List<string>(namesArray.Length); namesList.AddRange(namesArray); namesList.Reverse(); 

这样可以避免创build任何不合适大小的缓冲区 – 代价是在四个语句之间进行切换,就像以前一样,在实际使用情况下,要根据性能衡量可读性。

我意识到这个问题是相当古老的,但我有一个类似的问题,除了我的string中包含空格。 对于那些需要知道如何用逗号分隔string的人:

 string str = "Tom, Scott, Bob"; IList<string> names = str.Split(new string[] {","," "}, StringSplitOptions.RemoveEmptyEntries); 

StringSplitOptions删除logging,只会是一个空格字符…

 List<string> names = "Tom,Scott,Bob".Split(',').Reverse().ToList(); 

这个工作。

尝试这个:

 List<string> names = new List<string>("Tom,Scott,Bob".Split(',')); names.Reverse(); 

你在这里遗漏的是.Reverse()是一个无效的方法。 将.Reverse()的结果赋给一个variables是不可能的。 你可以改变顺序来使用Enumerable.Reverse()并得到你的结果

 var x = "Tom,Scott,Bob".Split(',').Reverse().ToList<string>() 

不同的是,Enumerable.Reverse()返回一个IEnumerable <T>而不是void return

如果你正在尝试

  1. 使用多个分隔符
  2. 过滤所有空string
  3. 修剪前/后空格

以下应该工作:

 string str = "Tom Cruise, Scott, ,Bob | at"; IEnumerable<string> names = str .Split(new char[]{',', '|'}) .Where(x=>x!=null && x.Trim().Length > 0) .Select(x=>x.Trim()); 

产量

  • 汤姆
  • 巡航
  • 斯科特
  • 短发

现在你可以明显地改变其他人的build议。