正确的语法是什么:
IList<string> names = "Tom,Scott,Bob".Split(',').ToList<string>().Reverse();
我在搞砸什么?TSource 是什么意思?
问题是您正在调用List<T>.Reverse()
which 返回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();
这避免了创建任何大小不合适的缓冲区 - 代价是在一个可以做的地方使用四个语句......与以往一样,在实际用例中权衡可读性与性能。
我意识到这个问题已经很老了,但是我遇到了类似的问题,除了我的字符串中包含空格。对于那些需要知道如何用不仅仅是逗号来分隔字符串的人:
string str = "Tom, Scott, Bob";
IList<string> names = str.Split(new string[] {","," "},
StringSplitOptions.RemoveEmptyEntries);
StringSplitOptions 删除仅是空格字符的记录...
List<string> names = "Tom,Scott,Bob".Split(',').Reverse().ToList();
这个有效。
试试这个:
List<string> names = new List<string>("Tom,Scott,Bob".Split(','));
names.Reverse();
您在这里缺少的是 .Reverse() 是一个 void 方法。无法将 .Reverse() 的结果分配给变量。但是,您可以更改顺序以使用 Enumerable.Reverse() 并获得结果
var x = "Tom,Scott,Bob".Split(',').Reverse().ToList<string>()
不同之处在于 Enumerable.Reverse() 返回一个 IEnumerable<T> 而不是 void 返回
如果你想
以下应该工作:
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());
输出
现在您显然可以按照其他人的建议颠倒顺序。