驚いたことに、次のステートメントが表示されます。
public static IEnumerable<SomeType> AllEnums
=> Enum.GetValues(typeof(SomeType));
System.ArrayからSystem.Collection.Generic.IEnumerableに変換できないことについて文句を言う。後者は前者から受け継いだものだと思いました。どうやら私は間違っていた。
LINQまたは。ToListができないため、適切に処理する方法がわかりません。明示的なキャストは避けたいと思います。これはenumの値の集まりなので、SomeTypeとして-ingはあまり役に立たないと思います。 。
一般的なArray
基本クラスは型指定されていないため、型固有のインターフェースは実装されていません。ただし、vectorは直接キャストできます-そしてGetValues
は実際にはベクトルを返します。そう:
public static IEnumerable<SomeType> AllEnums
= (SomeType[])Enum.GetValues(typeof(SomeType));
またはおそらくもっと簡単です:
public static SomeType[] AllEnums
= (SomeType[])Enum.GetValues(typeof(SomeType));
後者は前者から受け継いだものだと思いました。
_Enum.GetValues
_はArray
を返します。これは、非ジェネリックIEnumerable
を実装するため、キャストを追加する必要があります。
_public static IEnumerable<SomeType> AllEnums = Enum.GetValues(typeof(SomeType))
.Cast<SomeType>()
.ToList();
_
_Cast<T>
_だけでなく、非ジェネリックIEnumerable
インターフェイスに対して_IEnumerable<U>
_拡張メソッドが定義されているため、これはLINQで機能します。
編集:ToList()
の呼び出しは、実行が延期されたLINQメソッドによって生成された_IEnumerable<T>
_の複数回の歩行に関連する非効率性を回避します。素晴らしいコメントをありがとう、マーク!