运算符执行的相等性测试==
优先于运算符执行的赋值=
。因此,如果运算符的两侧相等,则将isDir
变量设置为等于,否则将设置为。换句话说,这相当于说:true
==
false
if ((File.GetAttributes(path) & FileAttributes.Directory) == FileAttributes.Directory)
isDir = true;
else
isDir = false;
这在 VB.NET 中是可能的。我无法回答其他语言。在 VB.NET 中,等价于:
Dim isDir As Boolean = ((File.GetAttributes(path) And FileAttributes.Directory) = FileAttributes.Directory)
由于 VB=
对其赋值和相等测试运算符使用相同的字符 ( ),因此它会根据上下文确定您正在执行的操作。VB 编译器足够聪明,知道第一个=
运算符是赋值,第二个是相等测试。然而,这显然是令人困惑的,因此为了便于阅读,通常不鼓励这样做。对于具有其他语言背景的人来说,这尤其令人困惑。例如,在 C# 中,您可以执行以下操作将两个变量设置为相同的值:
int y;
int x = y = 5; // Both x and y will be set to 5
在 C# 中发生的原因是因为=
始终是赋值运算符,并且赋值表达式总是计算(返回)分配的值。因此,在这种情况下,表达式y = 5
不仅将值 5 赋给变量y
,而且它的计算结果也为 5。因此,当您设置x
为该表达式的值时,它也会设置为 5。然而,在 VB 中,结果却大不相同:
Dim y As Integer
Dim x As Integer = y = 5
在 VB 中,编译器将假定表达式y = 5
是一个相等测试,因此它的计算结果为False
. 因此,它将尝试x = False
根据Option Strict
.