【问题标题】:C# to VB - TrimStart BehaviorC# 到 VB - TrimStart 行为
【发布时间】:2016-11-11 05:19:36
【问题描述】:

我有最简单的VB代码:

Dim test As String = "DDN8057"
Console.WriteLine(test.TrimStart("DDN"))

给我

N8057

为什么?将其转换为 C#(我更熟悉),让我意识到 TrimStart 实际上需要 params char[],但正在运行

Console.WriteLine("DDN8057".TrimStart("DDN".ToCharArray()));

给了我我的期望

8057

所以,我猜 VB 能够在内部将字符串视为 char 数组(这是真的吗?),但为什么我的输出会出现差异?

【问题讨论】:

  • 在 VB 中使用 {"D"c, "D"c, "N"c}"DDN".ToCharArray 可以得到预期的输出。当它需要一个 char 数组时传递一个字符串不会按预期工作。它只取字符串的第一个字母并忽略其余部分。将第二个 D 替换为任何其他字符以检查这一点
  • 如果您切换 Option Strict On(并且您应该始终打开它) - 那么 test.TrimStart("DDN") 将无法编译 - 出于您解释的原因

标签: c# vb.net string trim


【解决方案1】:

您的 VB 项目中没有打开 Option Strict。

我可以知道,因为test.TrimStart("DDN") 在打开时不会编译。这是因为正如您正确指出的那样,TrimStart 需要一个明确的 char 数组(或单个 char

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

您会认为字符串只是一个 char 数组,它会将其转换为数组,但事实并非如此 - 它有效地执行 CChar("DDN")!

结论

Option Strict On = 好。以下是默认开启的方法:Option Strict on by default in VB.NET

【讨论】:

  • 呸。我忘了option strict。即使关闭它,VB 让它在运行时运行似乎是激进的。
  • 我认为option strict off 就像在 C# 中使用动态一样。但基于option strict 文档,我猜字符串到字符是缩小转换
  • @Jonesopolis - dynamic 和 Option Strict 之间存在细微但重要的区别。 Strict 为 On 时产生的错误是 BC30512 - msdn.microsoft.com/en-us/library/4we5x2t7.aspx
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-24
  • 2011-12-10
  • 2010-12-15
  • 2016-04-22
  • 2016-04-28
  • 1970-01-01
相关资源
最近更新 更多