C#语法 - 通过逗号将字符串拆分为数组,转换为通用列表和反向顺序

Bud*_*Joe 87 c# generics syntax ilist

这个的正确语法是什么:

IList<string> names = "Tom,Scott,Bob".Split(',').ToList<string>().Reverse();
Run Code Online (Sandbox Code Playgroud)

我搞砸了什么?TSource是什么意思?

Jon*_*eet 242

问题是你正在调用List<T>.Reverse()哪个返回void.

你可以这样做:

List<string> names = "Tom,Scott,Bob".Split(',').ToList<string>();
names.Reverse();
Run Code Online (Sandbox Code Playgroud)

要么:

IList<string> names = "Tom,Scott,Bob".Split(',').Reverse().ToList<string>();
Run Code Online (Sandbox Code Playgroud)

后者更昂贵,因为任意转换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();
Run Code Online (Sandbox Code Playgroud)

这样可以避免创建任何大小不合适的缓冲区 - 代价是将四个语句放在一个人的位置......以往,在实际用例中权衡可读性和性能.

  • 双向飞碟是野兽! (24认同)
  • 精心制作,我真的很感激! (2认同)

Des*_*ley 10

我意识到这个问题已经很老了,但我遇到了类似的问题,除了我的字符串中包含空格.对于那些需要知道如何用不仅仅是逗号分隔字符串的人:

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

StringSplitOptions删除只是空格char的记录...


Run*_*tad 5

List<string> names = "Tom,Scott,Bob".Split(',').Reverse().ToList();
Run Code Online (Sandbox Code Playgroud)

这个有效。