C# の列挙型制約 [重複] 質問する

C# の列挙型制約 [重複] 質問する

重複の可能性あり:
enum ジェネリック制約が不足している場合の良い回避策を知っている人はいますか?

C# が 's の型制約を許可しない理由は何ですかEnum? この狂気の背後には方法があると確信していますが、なぜそれが不可能なのかを理解したいと思います。

以下は私が実現したいことです(理論上)。

public static T GetEnum<T>(this string description) where T : Enum
{
...
}

ベストアンサー1

実は、醜いトリックを使えば可能です。ただし、拡張メソッドには使用できません。

public abstract class Enums<Temp> where Temp : class {
    public static TEnum Parse<TEnum>(string name) where TEnum : struct, Temp {
        return (TEnum)Enum.Parse(typeof(TEnum), name); 
    }
}
public abstract class Enums : Enums<Enum> { }

Enums.Parse<DateTimeKind>("Local")

必要に応じて、as をEnums<Temp>使用してプライベート コンストラクターとパブリックのネストされた抽象継承クラスを指定し、非列挙型の継承バージョンを防ぐことができます。TempEnum

このトリックを使用して拡張メソッドを作成することはできないことに注意してください。

おすすめ記事