VB.NET的替代品';C#中的s类型转换函数(CBool)?
在C#中,VB的关键字还有其他选择吗 其他功能呢VB.NET的替代品';C#中的s类型转换函数(CBool)?,.net,vb.net,type-conversion,vb.net-to-c#,.net,Vb.net,Type Conversion,Vb.net To C#,在C#中,VB的关键字还有其他选择吗 其他功能呢 CBool将转换为布尔值任何有效的布尔值:0,“False”,null等等。看看这个类。诀窍在于VB.NET中的Cxx函数实际上不是函数。事实上,它们更像是编译器转换为“最佳匹配”类型转换的运算符 保罗·维克(Paul Vick)曾经在他的博客上写过一篇关于这方面的文章,但现在所有这些页面似乎都被删除了。(这在这里基本上是准确的)说: 这些函数是内联编译的,这意味着转换代码是计算表达式的代码的一部分。有时不需要调用过程来完成转换,从而提高了性能。
CBool
将转换为布尔值任何有效的布尔值:0
,“False”
,null
等等。看看这个类。诀窍在于VB.NET中的Cxx
函数实际上不是函数。事实上,它们更像是编译器转换为“最佳匹配”类型转换的运算符
保罗·维克(Paul Vick)曾经在他的博客上写过一篇关于这方面的文章,但现在所有这些页面似乎都被删除了。(这在这里基本上是准确的)说:
这些函数是内联编译的,这意味着转换代码是计算表达式的代码的一部分。有时不需要调用过程来完成转换,从而提高了性能。每个函数都将表达式强制为特定的数据类型
可用于执行此操作的选项包括直接强制转换(例如:(bool)var
),尝试强制转换(使用as
运算符),调用中定义的方法之一,调用适用的Type.Parse
方法,以及一些其他策略
在C#中没有直接的等价物:你必须按照编译器的思路来做
在这种情况下,您几乎肯定会希望使用该方法的适当重载,因为该特定方法将具有必要的逻辑来将值转换为
bool
。直接演员在这里不起作用 如果希望从字符串值之一“True”、“True”、“False”或“False”转换,则应使用Boolean.Parse。如果Parse没有得到预期的结果,它将“快速失败”,而不是试图对此“聪明”。通过在您并不真正需要的时候使用“智能”转换,您可能会在源代码中屏蔽错误,然后在代码中稍后出现错误时必须跟踪它们,这通常更困难。@Vladislav:这不是一回事。在C#中不能有(bool)1
,而CBool(1)
在VB.NET中是完全合法的。CBool不仅将有效的布尔值转换为布尔值。毕竟只有两个这样的有效值。它解释给定的值,如果成功,则返回true或false。这就是为什么它不同于只能在有效布尔值上工作的强制转换。我刚刚尝试过,而且强制转换
显然不像我想象的那样“聪明”:系统。转换是一种方法。@Vladislav:cast不应该是聪明的!这就是演员阵容的全部要点。它只是盲目/无声地将对象强制转换为指定的类型。它依赖于作为程序员的您进行事实检查,并确保演员阵容合理。您需要一种转换方法才能应用任何逻辑。您应该将强制转换看作是告诉编译器假装对象实际上是指定类型的对象。它实际上并没有改变对象的底层类型。感谢您的澄清,我相信我已经正式开始忘记我从C/C++中学到的一切。有时这是必要的。很多情况下,你知道你期望的要么是假的,要么是假的;从来没有别的事。