【问题标题】:Alternative to VB.NET's Type Conversion functions (CBool) in C#?在 C# 中替代 VB.NET 的类型转换函数 (CBool​​)?
【发布时间】:2026-02-12 16:30:01
【问题描述】:

C#中VB的CBool关键字有什么替代品吗?

所有其他功能呢?

CBool 将转换为布尔值任何有效的布尔值:0"False"null 等。

【问题讨论】:

  • @Vladislav:那不是一回事。在 C# 中不能有 (bool)1,而在 VB.NET 中 CBool(1) 是完全合法的。
  • CBool​​ 不仅将有效的布尔值转换为布尔值。毕竟只有两个这样的有效值。它解释给定的值,如果成功则返回真或假。这就是为什么它不同于仅适用于有效布尔值的强制转换
  • 我刚试了一下,cast 显然不像我想象的那么“聪明”:) System.Convert 是要走的路。
  • @Vladislav:演员表不应该聪明!这就是演员阵容的全部意义所在。它只是盲目/愚蠢地将对象转换为指定的类型。它依赖于您作为程序员来进行事实检查并确保演员表有意义。您需要一种转换方法才能应用任何逻辑。您应该将强制转换视为告诉编译器假装该对象实际上是指定类型。它实际上并没有改变对象的底层类型。
  • 感谢您的澄清,我相信我已经正式开始忘记我从 C/C++ 中学到的一切。

标签: .net vb.net type-conversion vb.net-to-c#


【解决方案1】:

看看System.Convert 类。

【讨论】:

    【解决方案2】:

    诀窍在于 VB.NET 中的Cxx“函数”实际上并不是函数。事实上,它们更像是运算符,编译器会将其转换为它所确定的“最佳匹配”类型转换。

    Paul Vick 曾经在他的博客上发表过一篇很棒的文章,但现在所有这些页面似乎都被删除了。 MSDN(这里大部分是准确的)说:

    这些函数是内联编译的,这意味着转换代码是计算表达式的代码的一部分。有时不需要调用过程来完成转换,从而提高了性能。每个函数都将表达式强制转换为特定的数据类型。

    它可用的选项包括直接转换(例如:(bool)var)、尝试转换(使用as 运算符)、调用System.Convert class 中定义的方法之一、调用适用的Type.Parse 方法,也许还有其他一些策略。

    在 C# 中没有直接的等价物:您必须改为执行编译器的想法。

    在这种情况下,您几乎肯定会希望使用Convert.ToBoolean 方法的适当重载,因为该特定方法将具有将值转换为bool 的必要逻辑。直接投射在这里不起作用。

    【讨论】:

      【解决方案3】:

      如果您希望从以下字符串值之一进行转换:“True”、“true”、“False”或“false”,则应使用 Boolean.Parse。如果 Parse 没有达到预期的效果,Parse 不会尝试“聪明”地处理它,而是会“快速失败”。通过在您并不真正需要时使用“智能”转换,您可能会在源头上掩盖错误,然后必须在它们稍后出现在代码中时对其进行追踪,这通常更加困难。

      【讨论】:

      • 有时是必要的。在很多情况下,你知道你期望的是 false 或 False;从来没有别的东西。