有没有 VB.net 的等效操作符可以替代 C# 中的 "!" 运算符?

7

由于我的现在工作需要,我从两年的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#的!运算符一样操作?
6个回答

14
在您展示的上下文中,VB中的 Not 关键字确实等同于C#中的 ! 运算符。但请注意,VB中的 Not 关键字实际上是重载的,代表了两个C#等效物:
  • 逻辑非: !
  • 位取反: ~
例如,以下两行代码是相等的:
  • C#: useThis &= ~doNotUse;
  • VB: useThis = useThis And (Not doNotUse)

10

是的,它们是相同的。


7
它们的表现方式相同,但它们绝对不是同一个东西。在VB中,“not”这个词会被重载用来表示逻辑否定和按位取反。 - HTTP 410
谢谢,我不知道这个。我在vb.net或C#中没有使用过位补码运算符。 - Ruben

7

Not!在布尔值上下文中的含义完全相同。在位运算中,它作为补码的语义取反。结合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测试。


2

在不引用C或C++代码的情况下,它们的工作方式是相同的。

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

由于1是        00000000001
按位取反       11111111110
而false是     00000000000

但是在VB中,它可以正常工作,因为在VB中true == -1。

由于-1是       11111111111
按位取反       00000000000

只是为了澄清上面的答案,在VB中没有==运算符,只有=运算符。因此,在VB中,true = -1,在C中true == 1。 - DennisP
我不知道 VB 为什么使用 -1,但我猜测这是因为 VB 的 NOT 运算符是位非运算,所以为了让 false(即0)成为 NOT True,他们不得不将 True 定义为 -1。 - yoel halb

0

C#:boolean example1 = false;

 boolean example2 = !example1;

vb.net:Dim example1 As Boolean = False

    dim example2 as boolean = Not example1

-1

同意。它们的工作方式完全相同。两者都会反转跟在! / not运算符后面的表达式的逻辑含义。


1
它们的作用方式相同,但它们绝对不相同。在VB中,“Not”被重载以表示逻辑否定和按位补码。 - HTTP 410

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接