将数组转换为 IEnumerable<T>
Converting Array to IEnumerable<T>
令我惊讶的是,我得到以下声明:
public static IEnumerable<SomeType> AllEnums
=> Enum.GetValues(typeof(SomeType));
抱怨无法从System.Array转换为System.Collection.Generic.IEnumerable。我认为后者是从前者继承而来的。看来我错了。
由于我无法对其进行 LINQ 或 .ToList,因此我不确定如何正确处理它。我宁愿避免显式转换,因为它是 enum 的一堆值,我不认为 as SomeType-ing 它会也没什么用。
I thought that the latter was inheriting from the former.
Enum.GetValues
returnsArray
,实现了非泛型IEnumerable
,所以需要加一个强制转换:
public static IEnumerable<SomeType> AllEnums = Enum.GetValues(typeof(SomeType))
.Cast<SomeType>()
.ToList();
这适用于 LINQ,因为 Cast<T>
扩展方法是为非通用 IEnumerable
接口定义的,而不仅仅是 IEnumerable<U>
.
编辑: ToList()
的调用避免了与多次行走相关的低效率和延迟执行的 LINQ 方法产生的 IEnumerable<T>
。谢谢 Marc 的精彩评论!
通用Array
基class没有类型,所以它没有实现任何类型特定的接口;但是,vector 可以直接转换 - 而 GetValues
实际上 returns 一个向量;所以:
public static IEnumerable<SomeType> AllEnums
= (SomeType[])Enum.GetValues(typeof(SomeType));
或者更简单:
public static SomeType[] AllEnums
= (SomeType[])Enum.GetValues(typeof(SomeType));
令我惊讶的是,我得到以下声明:
public static IEnumerable<SomeType> AllEnums
=> Enum.GetValues(typeof(SomeType));
抱怨无法从System.Array转换为System.Collection.Generic.IEnumerable。我认为后者是从前者继承而来的。看来我错了。
由于我无法对其进行 LINQ 或 .ToList,因此我不确定如何正确处理它。我宁愿避免显式转换,因为它是 enum 的一堆值,我不认为 as SomeType-ing 它会也没什么用。
I thought that the latter was inheriting from the former.
Enum.GetValues
returnsArray
,实现了非泛型IEnumerable
,所以需要加一个强制转换:
public static IEnumerable<SomeType> AllEnums = Enum.GetValues(typeof(SomeType))
.Cast<SomeType>()
.ToList();
这适用于 LINQ,因为 Cast<T>
扩展方法是为非通用 IEnumerable
接口定义的,而不仅仅是 IEnumerable<U>
.
编辑: ToList()
的调用避免了与多次行走相关的低效率和延迟执行的 LINQ 方法产生的 IEnumerable<T>
。谢谢 Marc 的精彩评论!
通用Array
基class没有类型,所以它没有实现任何类型特定的接口;但是,vector 可以直接转换 - 而 GetValues
实际上 returns 一个向量;所以:
public static IEnumerable<SomeType> AllEnums
= (SomeType[])Enum.GetValues(typeof(SomeType));
或者更简单:
public static SomeType[] AllEnums
= (SomeType[])Enum.GetValues(typeof(SomeType));