C# 到 VB - TrimStart 行为

C# to VB - TrimStart Behavior

我有最简单的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 需要一个明确的 char 数组(或单个 char

当你 运行 关闭 Option Strict 时会发生什么是编译器将 String (DDN) 强制转换为 单个 字符(D) (这是 Option Strict 明确禁止的隐式缩小转换)这就是为什么你得到 N8057 作为你的输出。

你会认为字符串只是一个字符数组,它会把它转换成数组,但事实并非如此——它有效地执行 CChar("DDN")!

结论

Option Strict On = 好。默认情况下如何打开它:Option Strict on by default in VB.NET