今天早上我遇到了这个问题。这是要复制的代码:
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\
任何想法在那时分裂了什么?
答案 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
值,然后在a
中program
分开并解释您所看到的行为。
而是使用在此替代Split方法调用中提供StringSplitOptions
。