C#/ LINQ:尝试优化性能

时间:2010-10-19 10:36:43

标签: c# linq

这是我的设置

class EditorTabViewModel : TabViewModel {
    ...
    public bool CanSave { get; set; };
}

ObservableCollection<TabViewModel> _tabs

我想检查_tabsEditorTabViewModel是否有CanSave属性var tabs = from t in _tabs where t is EditorTabViewModel && ((EditorTabViewModel)t).CanSave == true select t; if (tabs.Count() > 0) return true; else return false; 设为真的标签

我做了类似......

{{1}}

我想知道是否有更好的方法来做到这一点?也许我不需要检索所有标签,或者我只需要查询计数或什么?

4 个答案:

答案 0 :(得分:11)

怎么样:

return _tabs.OfType<EditorTabViewModel>().Any(t => t.CanSave);

下面:

  • OfType<>是一个非缓冲过滤器,将我们限制为EditorTabViewModel
  • Any正在短路,因此只要找到匹配就会返回

答案 1 :(得分:2)

是的,你可以改进。这样的事可能会奏效:

return _tabs.Any(x => x is EditorTabViewModel && ((EditorTabViewModel)x).CanSave);

答案 2 :(得分:1)

使用linq扩展,您可以编写类似

的内容

_tabs.Any( p => p is EditorTabViewModel && ((EditorTabViewModel)t).CanSave)

答案 3 :(得分:1)

尝试类似:

return _tabs.FirstOrDefault(y => y is EditorTabViewModel && ((EditorViewModel)t).CanSave) != null;