C# の列挙型の制約
C# はジェネリック クラスとメソッドの型制約をサポートしていますが、これらの制約は列挙型には適用できません。この制限の背後にある理論的根拠を理解すると、理解が深まります。
技術的な理由
C# の列挙型は整数データ型 (通常は整数) として表されます。 enum に型制約を適用するには、指定された型が実際に 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); } } Enums.Parse<DateTimeKind>("Local");
この抽象クラスから継承することにより、列挙型を特定の型に制限できます。ただし、このメソッドは拡張メソッドには適用できません。
その他の考慮事項
上記の回避策には追加の抽象化層が必要であり、適用できない場合があることに注意することが重要です。あらゆる状況に適しています。さらに、列挙型はすでに厳密に型指定されているため、列挙型制約はエラー チェックの点で大きな利点をもたらしません。
以上がC# のジェネリック型制約を列挙型に適用できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。