【问题标题】:Is there a VB.net equivalent for C#'s ! operator?是否有 C# 的 VB.net 等价物!操作员?
【发布时间】:2018-02-08 02:11:33
【问题描述】:

在使用 C# 两年后,由于我目前的工作,我现在回到了 VB.net。在 C# 中,我可以对字符串变量的 null 或 false 值进行速记测试,如下所示:

if(!String.IsNullOrEmpty(blah))
{
   ...code goes here
}

但是我对如何在 VB.net 中执行此操作有点困惑。

if Not String.IsNullOrEmpty(blah) then
   ...code goes here
end if

上面的语句是否意味着字符串不为空或不为空? Not 关键字是否像 C# 的 ! 运算符一样操作?

【问题讨论】:

    标签: vb.net


    【解决方案1】:

    在您显示的上下文中,VB Not 关键字确实等同于 C# ! 运算符。但请注意,VB Not 关键字实际上被重载以表示两个 C# 等效项:

    • 逻辑否定:!
    • 按位补码:~

    例如,下面两行是等价的:

    • C#:useThis &= ~doNotUse;
    • VB:useThis = useThis And (Not doNotUse)

    【讨论】:

      【解决方案2】:

      是的,它们是一样的

      【讨论】:

      • 它们的行为方式相同,但绝对不一样。 VB 中的 'Not' 被重载以表示逻辑否定和按位补码。
      • 谢谢,我不知道。我没有在 vb.net 或 C# 中使用按位补码运算符
      【解决方案3】:

      Not! 完全一样(在Boolean 的上下文中。请参阅RoadWarrior 的注释,了解它在位算术中作为一个补码的语义)。有一个特殊情况结​​合Is 运算符来测试引用相等性:

      If Not x Is Nothing Then ' … '
      ' is the same as '
      If x IsNot Nothing Then ' … '
      

      相当于C#的

      if (x != null) // or, rather, to be precise:
      if (object.ReferenceEquals(x, null))
      

      这里,IsNot 的用法是首选。不幸的是,它不适用于TypeOf 测试。

      【讨论】:

        【解决方案4】:

        在您引用 C 或 C++ 代码之前,它们的工作方式相同。

        例如,对 Win32 API 函数的结果执行 NOT 可能会导致不正确的结果,因为在 C == 1 中为 true,并且 1 上的按位 NOT 不等于 false。

        因为 1 是 00000000001 按位非 11111111110 虽然 false 是 00000000000

        但是在 VB 中它工作得很好,就像在 VB 中一样 true == -1

        因为 -1 是 11111111111 按位非 00000000000

        【讨论】:

        • 只是为了澄清上面的答案,在VB中没有==运算符;只有 = 运算符。所以在 VB 中为 true = -1,在 C 中为 true == 1。
        • 我不知道 VB 使用 -1 的原因,但我猜这是因为 VB NOT 运算符按位不是,所以为了使 false(即 0)成为NOT True 他们必须将 True 定义为 -1
        【解决方案5】:

        c# : boolean example1 = false;

         boolean example2 = !example1;
        

        vb.net: 将 example1 暗淡为 boolean = False

            dim example2 as boolean = Not example1
        

        【讨论】:

          【解决方案6】:

          第二。它们的工作方式相同。两者都反转了 !/not 运算符后面的表达式的逻辑含义。

          【讨论】:

          • 它们的行为方式相同,但绝对不一样。 VB 中的 'Not' 被重载以表示逻辑否定和按位补码。
          猜你喜欢
          • 2010-09-29
          • 2013-05-17
          • 2019-02-09
          • 2012-12-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-27
          • 1970-01-01
          相关资源
          最近更新 更多