C#查询窗口集合

本文关键字:集合 窗口 查询 | 更新日期: 2023-09-27 18:27:54

我在尝试查询System.Windows.WindowCollection时遇到了基本问题。在我的代码中,我有

WindowCollection z =   Application.Current.Windows;

并且想做z。Any();

C#查询窗口集合

WindowCollection类的定义如下

public sealed class WindowCollection : ICollection, IEnumerable

正如您所看到的,它没有实现IEnumerable<Window>,因此为了能够访问大多数Enumerable扩展方法,您首先需要使用Enumerable

z.Cast<Window>().Any();

LINQ仅适用于IEnumerable<T>接口。WindowCollection仅实现IEnumerable。有两种选择:

  • Cast<T>()-此返回IEnumerable,但如果集合中有无法强制转换为t的元素,则将引发异常
  • OfType<T>()-这将返回IEnumerable。它跳过了不能强制转换为t的元素,这就是为什么我更喜欢OfType

Application.Current.Windows.OfType<Window>().Any();