![](/img/trans.png)
[英]Why does it seem like operations are not being performed in the order of the code?
[英]Why does this code seem to exhibit a bug?
我有一個針對WPF命令的CanExecute
,它看起來有所不同,具體取決於我對編譯器的明確程度; 問題是,我不希望必須明確。
private bool CanRemoveField()
{
return SelectedField != null &&
Context.Item.Id == 0
? _fieldsByFieldModel.ContainsKey(SelectedField)
: !_hasAnyCosts;
}
上面的代碼,當查詢一個項目,其中Id != 0
成立時, 盡管 SelectedField
為null
,按鈕仍然啟用,所以我希望條件為short並返回false
。
代碼略有調整:
private bool CanRemoveField()
{
return SelectedField != null &&
(Context.Item.Id == 0
? _fieldsByFieldModel.ContainsKey(SelectedField)
: !_hasAnyCosts);
}
我已經在三元組周圍引入了一些括號,並且現在顯示了在沒有選擇字段時禁用按鈕的所需行為。
鑒於它是一個三元組,如果,我已經預料到我想要的行為,而不需要括號,因為它應該只被視為一個陳述,不是嗎?
由於運算符優先級,您的第一個示例等效於:
private bool CanRemoveField()
{
return (SelectedField != null &&
Context.Item.Id == 0)
? _fieldsByFieldModel.ContainsKey(SelectedField)
: !_hasAnyCosts;
}
你看到的結果是有意義的,因為&&
logical-and運算符的優先級高於? :
? :
條件表達式 。
所以你的第一個代碼片段基本上是:
return (SelectedField != null && Context.Item.Id == 0)
? _fieldsByFieldModel.ContainsKey(SelectedField)
: !_hasAnyCosts;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.