C#/LINQ:尝试优化性能

C#/LINQ:尝试优化性能,c#,linq,C#,Linq,这是我的设置 class EditorTabViewModel : TabViewModel { ... public bool CanSave { get; set; }; } ObservableCollection<TabViewModel> _tabs 我想知道有没有更好的办法?也许我不需要检索所有选项卡,或者我只需要查询计数或其他什么?使用linq扩展,您可以编写如下内容 \u tabs.Any(p=>p是EditorTabViewModel&((Edi

这是我的设置

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

ObservableCollection<TabViewModel> _tabs

我想知道有没有更好的办法?也许我不需要检索所有选项卡,或者我只需要查询计数或其他什么?

使用linq扩展,您可以编写如下内容

\u tabs.Any(p=>p是EditorTabViewModel&((EditorTabViewModel)t).可以保存)

怎么样:

return _tabs.OfType<EditorTabViewModel>().Any(t => t.CanSave);
return\u tabs.OfType().Any(t=>t.CanSave);
在这里:

  • of type
    是一个非缓冲过滤器,它限制我们使用
    EditorTabViewModel
  • Any
    短路,因此只要找到匹配项,就会返回true
尝试以下方法:

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

是的,你可以提高。类似的方法可能会奏效:

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

SingleOrDefault
仍必须使用整个序列,以确保没有两个匹配项。事实上,当可以保存多个选项卡时,这将产生与原始代码(返回true)不同的结果(异常)。
return _tabs.Any(x => x is EditorTabViewModel && ((EditorTabViewModel)x).CanSave);