有没有类似于String.Split的方法可以返回一个通用列表?

14

我想要做类似这样的事情:

Dim Foo as String = "a,b,c,d,e"
Dim Boo as List(of String) = Foo.Split(","c)

当然,Foo.Split 返回的是一个一维的 String 数组,而不是通用的 List。是否有一种方法可以在不迭代数组将其转换为通用的 List 的情况下完成此操作?

8个回答

35

如果您不想使用LINQ,可以这样做:

Dim foo As String = "a,b,c,d,e"
Dim boo As New List(Of String)(foo.Split(","c))

1
以前不知道可以用 c 来将字符串转换为字符... 我一直使用 new Char() { "," }。这样看起来更加整洁。 - freefaller

7
你可以使用列表的构造函数。
String foo = "a,b,c,d,e";
List<String> boo = new List<String>(foo.Split(","));

抱歉马特!没有恶意! - Bob King

6

你真的需要一个List<T>吗?还是IList<T>就足够了?因为string[]已经实现了后者……这也是为什么在可行的情况下编程应该针对接口而非具体实现。尽管可能在这种情况下你确实不行。


你可以使用IList<T>,事实上你应该这样做(即使我在我的答案代码示例中忘记了)。 - IAmCodeMonkey
我同意,虽然我正在努力养成这个习惯。 - Saif Khan

4
最简单的方法可能是使用AddRange方法。
Dim Foo as String = "a,b,c,d,e"
Dim Boo as List(of String)

Boo.AddRange(Foo.Split(","c))

谢谢 - 这个也可以,而且和被接受的答案一样好,只是稍微不太紧凑。 - Herb Caudill
1
那段代码能正常工作吗?在我看来,它似乎会抛出 NullReferenceException 异常。 - Ryan Lundy

0

为了进一步完善答案,我发现以下内容非常有帮助:

Return New List(Of String)(IO.File.ReadAllLines(sFileName))

0
Dim Foo as String = "a,b,c,d,e"
Dim Boo as List(of String)
Boo = Split(Foo, ",").ToList

这种方法的优点是split-string可以接受多个字符:
Dim Foo as String = "a<blah>b<blah>c<blah>d<blah>e"
Dim Boo as List(of String)
Boo = Split(Foo, "<blah>").ToList

0
这是我的做法...由于split正在查找字符数组,因此我在字符串中剪掉了第一个值。
var values = labels.Split(" "[0]).ToList<string>();

0
如果您使用Linq,您可以使用ToList()扩展方法。
Dim strings As List<string> = string_variable.Split().ToList<string>();

你打算如何使用Linq查询逗号分隔的字符串? - Herb Caudill
1
他没有查询它。Code Monkey在他的答案中展示的ToList()扩展方法只是通常称为“Linq”的功能类的一部分(用于支持LINQ查询,但您也可以将其用于其他事情)。 - James Curran

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接