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

时间:2008-11-24 20:30:50

标签: c# generics syntax ilist

这是正确的语法:

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

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

6 个答案:

答案 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)

如果您正在尝试

  1. 使用多个分隔符
  2. 过滤所有空字符串
  3. 修剪前导/尾随空格
  4. 以下应该工作:

    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());
    

    输出

    • 汤姆
    • 巡航
    • 斯科特
    • 鲍勃

    现在你可以像其他人建议的那样明显颠倒顺序。