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
我有最简单的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