String.Split的异常行为

时间:2014-03-04 16:00:25

标签: .net vb.net string split

今天早上我遇到了这个问题。这是要复制的代码:

Dim s As String = "C:\program files (x86)\test1\abc.exe"
Console.WriteLine(s.Split("abc.exe")(0))

结果是:c:\progra我希望它是c:\program files (x86)\test1\

任何想法在那时分裂了什么?

2 个答案:

答案 0 :(得分:6)

您使用了错误的重载。您应该使用以字符串作为分隔符的那个,即:

Dim s As String = "C:\program files (x86)\test1\abc.exe"
Console.WriteLine(s.Split(New String() {"abc.exe"}, StringSplitOptions.None)(0))

澄清:

您观察到的行为是使用Option Strict Off的典型“缺点”之一(如果您不是100%确定自己在做什么,那么为什么建议始终使用Option Strict On):你正在使用带有字符作为分隔符的重载而VB.NET没有抱怨,因为自动将string转换为character s是Option Strict On所做的事情之一。至于"abc.exe"与任何字符都不匹配,VB.NET会理解一些默认值(显然是一个空格)。

结论:当你使用Split字符串(包含一个字符或100个字符串)作为分隔符时,你应该使用正确的重载(如我的代码所示)。

结论2:始终写Option Strict On

答案 1 :(得分:4)

我通常不会做VB,所以我可能在这里错了,但我的猜测就是将你的String视为一个字符。

VB是否隐式投射?如果是这样,它可以将您的字符串转换为char而不是?如果是这样,那么它将取a值,然后在aprogram分开并解释您所看到的行为。

而是使用在此替代Split方法调用中提供StringSplitOptions