enum値のIEnumerable<MyEnum>
が必要な状況がいくつかあります。私が通常使用するコードは次のようになります。Enumの値をEnum.GetValues()よりも列挙する方法がありますか?
Enum.GetValues(typeof(MyEnum)).OfType<MyEnum>()
だけでなく、ほとんどの人はそれが何をするかを理解するために数秒を必要とする、見て非常にきれいではありません。また、コード全体で複数の場面で必要とするときには、書くのは苦労します。
私の人生を容易にするために、私はこのような拡張メソッドを書くことにしました:
public static IEnumerable<T> GetValues<T>(this T e) where T : Enum
{
return Enum.GetValues(typeof(T)).OfType<T>();
}
制約は特別なクラスの列挙することはできません "ので、私は、where T : Enum
一部を取り除くために持っている場合を除き'」。また、正確には私が欲しいものではありません。MyEnum.GetValues()
の代わりにMyEnum.Value.GetValues()
と書く必要があります。これはかなり混乱していて、それほどきれいではありません。
これは、Enum.GetValues()
を使用するよりenum値のIEnumerable<MyEnum>
を取得する良い方法はありますか?
実際に他の選択肢はありませんが、Helper.GetEnumValues<MyEnum>()
にするのですか?
可能であれば、私はUnityで動作するソリューションをお望みですが、いずれの方法でも解決できるソリューションです。
「ほとんどの人は、何をしているのか理解するのに数秒かかるでしょう。なぜそれを言うのですか?それは私には完全に理解できます。私は体重を減らそうとしているわけではありません。私のポイントは、開発者の間で幅広い経験があることです。合理的に短い記述を書いている限り、他の開発者が何を考えているか心配する必要はありません。それを理解するのは彼らの負担です。あなたが本当にそれがはっきりしないと思うなら、あなたはいつもコメントでそれを飾ることができます。 –
'Helper'を' Enums'に、 'GetEnumValues'を' For'に名前を変更すると、それはもっと短くなり、自己文書化します: 'var firstEnum = Enums.For().first(); –
マークされた重複の11個の異なる回答と、本質的に 'GetValues()'を本質的に呼び出すとは限らない場合は、それが得られるほど良いと示唆しています。 'OfType()'の代わりに 'Cast ()'を使用します - 前者は普通のキャストに似ていますが、後者は 'as'演算子のようなものですが、ビルトインはありませんこれ以上のオプションはありません。しかし、実際にはenum型へのメソッド呼び出しを制限する解決策については、http://stackoverflow.com/a/2632759を参照してください。 –