Cli*_*int 2 .net c# wpf compiler-bug
我有CanExecute一个WPF命令看起来有所不同,这取决于我对编译器的明确程度; 问题是,我不希望必须明确.
private bool CanRemoveField()
{
return SelectedField != null &&
Context.Item.Id == 0
? _fieldsByFieldModel.ContainsKey(SelectedField)
: !_hasAnyCosts;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码,当查询一个Id != 0保持为真的项时,按钮启用,尽管 SelectedField是null,所以我希望条件短路并返回false.
代码略有调整:
private bool CanRemoveField()
{
return SelectedField != null &&
(Context.Item.Id == 0
? _fieldsByFieldModel.ContainsKey(SelectedField)
: !_hasAnyCosts);
}
Run Code Online (Sandbox Code Playgroud)
我已经在三元组周围引入了一些括号,并且现在显示了在没有选择字段时禁用按钮的所需行为.
鉴于它是一个三元组,如果,我已经预料到我想要的行为,而不需要括号,因为它应该被视为一个陈述,不是吗?
由于运算符优先级,您的第一个示例等效于:
private bool CanRemoveField()
{
return (SelectedField != null &&
Context.Item.Id == 0)
? _fieldsByFieldModel.ContainsKey(SelectedField)
: !_hasAnyCosts;
}
Run Code Online (Sandbox Code Playgroud)
你看到有意义的结果,因为在&&逻辑和操作符比的优先级高? :的条件表达式.
所以你的第一个代码片段基本上是:
return (SelectedField != null && Context.Item.Id == 0)
? _fieldsByFieldModel.ContainsKey(SelectedField)
: !_hasAnyCosts;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
69 次 |
| 最近记录: |