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>
使用してプライベート コンストラクターとパブリックのネストされた抽象継承クラスを指定し、非列挙型の継承バージョンを防ぐことができます。Temp
Enum
このトリックを使用して拡張メソッドを作成することはできないことに注意してください。