String.Split的异常行为

use*_*538 6 .net vb.net string split

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

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

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

任何想法在那一点上分裂了什么?

var*_*bas 6

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

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

澄清:

您观察到的行为是使用的典型"缺点"之一Option Strict Off(这就是为什么建议您始终使用,Option Strict On如果您不是100%确定您正在做什么):您使用过载将字符作为分隔符和VB. NET没有抱怨,因为将strings 自动转换为characters是其中之一Option Strict On.只要"abc.exe"不匹配任何字符,VB.NET就会理解一些默认值(显然是一个空格).

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

结论2:总是写Option Strict On.