C#到VB-TrimStart行为
我有最简单的VB代码:C#到VB-TrimStart行为,c#,vb.net,string,trim,C#,Vb.net,String,Trim,我有最简单的VB代码: Dim test As String = "DDN8057" Console.WriteLine(test.TrimStart("DDN")) 给我 N8057 为什么??将其转换为C#(我更熟悉),使我意识到TrimStart实际上需要一个params char[],但正在运行 Console.WriteLine("DDN8057".TrimStart("DDN".ToCharArray())); 给了我我的期望 8057 因此,我想VB能够在内部将字符串视为字符数
Dim test As String = "DDN8057"
Console.WriteLine(test.TrimStart("DDN"))
给我
N8057
为什么??将其转换为C#(我更熟悉),使我意识到TrimStart
实际上需要一个params char[]
,但正在运行
Console.WriteLine("DDN8057".TrimStart("DDN".ToCharArray()));
给了我我的期望
8057
因此,我想VB能够在内部将字符串视为字符数组(这是真的吗?),但为什么我的输出中存在差异?您的VB项目中没有打开Option Strict 我能说出来,因为启用此选项时,
test.TrimStart(“DDN”)
不会编译。这是因为正如您正确指出的TrimStart
需要一个显式字符数组(或单个字符)
在关闭选项Strict的情况下运行此选项时,编译器会将字符串(DDN
)强制为单个字符(D
)(这是选项Strict明确禁止的隐式缩小转换),这就是将N8057
作为输出的原因
您可能会认为,由于字符串只是一个字符数组,它会将其转换为一个数组,但它不会-它有效地执行CChar(“DDN”)
结论
选项严格开启=良好。下面是默认情况下如何打开它的方法:使用{“D”c,“D”c,“N”c}
或“DDN”。VB中的ToCharray
提供了预期的输出。在需要字符数组时传递字符串将无法正常工作。它只取字符串的第一个字母,忽略其余字母。将第二个D替换为任何其他字符以检查此问题如果您打开Option Strict(并且应该始终打开它),则test.TrimStart(“DDN”)
将不会编译,原因是您解释了BAH。我忘记了选项严格
。虽然关闭了它,但VB让它在运行时运行似乎很激进。我认为选项严格关闭
就像在C#中使用动态一样。但是基于选项strict
docs,我猜字符串到字符的范围缩小了conversion@Jonesopolis-动态和选项严格之间存在细微但重要的区别。启用Strict时产生的错误是BC30512
-