【发布时间】:2014-02-19 19:21:41
【问题描述】:
当使用内部有嵌套条件的 foreach 循环时,我曾经这样写:
foreach (RadioButton item in listOfRadioButtons)
{
if (item.IsChecked == true)
{
// sometging
}
}
但我已经安装了 ReSharper,它建议将此循环更改为以下形式(删除 if 并使用 lambda):
foreach (RadioButton item in listOfRadioButtons.Where(item => item.IsChecked == true))
{
// something
}
根据我的经验,ReSharper 方式会循环两次:一次生成过滤后的 IEnumerable,然后再次循环 .Where 查询的结果。
我说的对吗?如果是这样,为什么 ReSharper 建议这样做?因为在我看来,第一个也更可靠。
注意:WPF RadioButton 的默认 IsChecked 属性是 Nullable bool,因此它需要一个 == true、一个 .Value 或在条件内强制转换为 bool 以返回 bool。
【问题讨论】:
-
很明显,JetBrains 知道一些你不知道的事情。
-
ReSharper 建议使用
item.IsChecked == true不是很好 -
为什么不呢? IsChecked 是一个布尔值?,而不是一个布尔值
-
最好将这一事实添加到您的问题中。
标签: c# wpf loops foreach resharper