簡體   English   中英

為什么這段代碼似乎出現了錯誤?

[英]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成立時, 盡管 SelectedFieldnull ,按鈕仍然啟用,所以我希望條件為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM