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
如果你正在尝试
- 使用多个分隔符
- 过滤所有空string
- 修剪前/后空格
以下应该工作:
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议。