如果我正在评估两个变量,而不是两个方法调用,那么天气问题我使用"&&"或"&"
//some logic that sets bool values
boolean X = true;
boolean Y = true;
if (X & Y){
// perform some operation
}
if (X && Y){
// perform some operation
}
Run Code Online (Sandbox Code Playgroud)
另外我用于C#3.0/.NET 3.5的书只引用了&&运算符,&运算符会消失吗?
如果您正在执行真/假逻辑测试,请始终使用&&.一个单一的&执行一点'和'.在某些情况下,它会像逻辑测试一样工作,但不能保证适用于所有逻辑案例.单个&的最常见用法是在应用位掩码时.
例子 (&&):
true && true == true
Run Code Online (Sandbox Code Playgroud)
示例(&):
00101001 & 00100001 = 00100001
Run Code Online (Sandbox Code Playgroud)
如果使用单个&(和),则评估表达式的第二部分.如果第二部分依赖于第一部分是真的,这可能是不好的.通常总是使用&&,因为如果第一部分是假的,则不评估第二部分.
逻辑上单个&执行按位操作,正如其他人所说,这对于布尔比较/评估仍然有效.实际上唯一一次使用单个&(或|)(或布尔评估)是第二次评估应该始终运行(如果它是一个函数调用/修饰符).这是不好的做法,也可能是为什么这本书没有提到它.
单个&对标志枚举和位掩码很有用.
以下将抛出obj为null的异常:
bool b = obj != null & obj.IsActive
Run Code Online (Sandbox Code Playgroud)
但这会奏效:
bool b = obj != null && obj.IsActive
Run Code Online (Sandbox Code Playgroud)
这是不好的:
bool b = obj.IsActive && obj.SetActive(false);
bool b = obj.IsActive & obj.SetActive(false);
Run Code Online (Sandbox Code Playgroud)
&运营商将留在这里.
正如所观察到的,&是按位 AND 运算符。随着时间的推移,原始二进制数学似乎越来越不常见,越来越多的开发人员并不真正理解按位算术。有时这可能会很痛苦。
然而,有很多任务最好用这种方法来解决,特别是任何将数据视为标志的任务。该&运算符是 100% 必要的,并且不会去任何地方 - 它只是没有像布尔短路运算符那样频繁使用&&。
例如:
[Flags]
enum SomeEnum { // formatted for space...
None = 0, Foo = 1, Bar = 2 // 4, 8, 16, 32, ...
}
static void Main() {
SomeEnum value = GetFlags();
bool hasFoo = (value & SomeEnum.Foo) != 0;
}
static SomeEnum GetFlags() { ... }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5808 次 |
| 最近记录: |