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