我有一个WCC命令的CanExecute
,它的工作方式似乎有所不同,具体取决于我对编译器的了解程度。问题是,我不希望必须明确。
private bool CanRemoveField()
{
return SelectedField != null &&
Context.Item.Id == 0
? _fieldsByFieldModel.ContainsKey(SelectedField)
: !_hasAnyCosts;
}
上面的代码在查询
Id != 0
保持为true的项目时,尽管SelectedField
是null
,按钮仍处于启用状态,因此我希望条件会短路并返回false
。代码稍作调整:
private bool CanRemoveField()
{
return SelectedField != null &&
(Context.Item.Id == 0
? _fieldsByFieldModel.ContainsKey(SelectedField)
: !_hasAnyCosts);
}
我在三元组if周围引入了一些括号,这现在表现出在未选择任何字段时禁用按钮的期望行为。
考虑到它是三元组,如果我希望我的行为不需要括号就可以实现,因为它应该被视为一个陈述,不是吗?
最佳答案
从the &&
logical-and operator has a higher precedence than the ? :
conditional expression开始,您看到的结果有意义。
因此,您的第一个代码段实质上是:
return (SelectedField != null && Context.Item.Id == 0)
? _fieldsByFieldModel.ContainsKey(SelectedField)
: !_hasAnyCosts;