我有以下查询:
return Postcodes
.Where(
s => s.Postcode.IndexOf(term, StringComparison.InvariantCultureIgnoreCase) > -1 &&
string.IsNullOrEmpty(country) ? true : s.CountryRegionID.Equals(country, StringComparison.InvariantCultureIgnoreCase)
)
.Select(p => new { label = p.Postcode, value = p.RecID })
.ToList();
现在我原本希望这会返回所有匹配国家/地区和邮政编码的邮政编码但由于某种原因它只匹配该条款,如果国家/地区为空,然后如果国家/地区不为空,则忽略该条款并且只匹配国家。
如果我在三元组周围放置括号:
return Postcodes
.Where(
s => s.Postcode.IndexOf(term, StringComparison.InvariantCultureIgnoreCase) > -1 &&
(string.IsNullOrEmpty(country) ? true : s.CountryRegionID.Equals(country, StringComparison.InvariantCultureIgnoreCase))
)
.Select(p => new { label = p.Postcode, value = p.RecID })
.ToList();
然后它完全按照我的预期运作。为什么额外的括号对有所不同,因为代码分析总是抱怨我把括号括在三元组周围?
答案 0 :(得分:7)
在C#中,三元运算符的优先级低于条件AND运算符。因此,没有括号并在三元运算符之前进行评估,并且您有三元运算符来检查邮政编码和国家/地区。即默认情况下
( checkPostcode && countryNotNull) ? true : checkCountry
添加括号时,拆分三元运算符,从邮政编码检查中检查国家/地区
checkPostcode && (countryNotNull ? true : checkCountry)