有人可以解釋為什么不帶括號的比較result1 == true回傳的結果與帶括號的比較不同result2 == false嗎?這兩個結果都應該是錯誤的,因為_enum != TestEnum.Member2.
class Program
{
private static TestEnum _enum = TestEnum.Member1;
private static int? _int = null;
private static string _string = null;
public static void Main(params string[] args)
{
var result1 = _enum == TestEnum.Member2 &&
_int != null ? _int == 5 : true &&
_string != null ? _string == "abc" : true;
var result2 = (_enum == TestEnum.Member2) &&
(_int != null ? _int == 5 : true) &&
(_string != null ? _string == "abc" : true);
Console.WriteLine("result1: " result1);
Console.WriteLine("result2: " result2);
}
}
public enum TestEnum
{
Member1,
Member2
}
.net 小提琴:https ://dotnetfiddle.net/daA0Lh
uj5u.com熱心網友回復:
原因是運算子優先級
這是您正在使用的運算子的優先順序。
()==&&? :
所以...
var result1 = _enum == TestEnum.Member2 &&
_int != null ? _int == 5 : true &&
_string != null ? _string == "abc" : true;
與 - 這里的括號不應該改變運算式的計算方式,但應該用來明確運算式的計算方式。
var result1 = ((_enum == TestEnum.Member2) && _int != null)
? (_int == 5)
: ((true && _string != null)
? _string == "abc"
: true);
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/495630.html
