ホームページ >バックエンド開発 >C++ >C# での Enum 汎用制約の欠如を回避するにはどうすればよいでしょうか?

C# での Enum 汎用制約の欠如を回避するにはどうすればよいでしょうか?

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-19 07:06:09716ブラウズ

How Can We Work Around the Lack of Enum Generic Constraints in C#?

C# の列挙型汎用制約の代替

C# プログラミングでは、列挙型の汎用制約がないため、フラグ列挙型に対して特定の操作を実行しようとするときに問題が発生する可能性があります。この問題を解決するには、UnconstrainedMelody ライブラリを使用した回避策を詳しく見てみましょう。

UnconstrainedMelody は、「疑似」汎用制約を「実際の」制約に変換します。たとえば、次のようになります:

<code>where T : struct, IEnumConstraint</code>

に変換:

<code>where T : struct, System.Enum</code>

これにより、開発者は次のようなメソッドを定義できます。

<code>public static bool IsSet<T>(this T input, T matchTo)
    where T : System.Enum
{
    return (input & matchTo) != 0;
}</code>

このメソッドを使用すると、次のことが可能になります:

<code>MyEnum tester = MyEnum.FlagA | MyEnum.FlagB;

if (tester.IsSet(MyEnum.FlagA))
    // 对标志 a 执行操作</code>

UnconstrainedMelody は、ビルド後の手順が完了した後、シームレスに統合されます。

ただし、複数のフラグが指定されている場合の「IsSet」メソッドの動作を考慮してください。

<code>tester.IsSet(MyFlags.A | MyFlags.C);</code>

すべてのフラグが設定されているかどうかを確認する必要がありますか、それとも 1 つだけを確認する必要がありますか?推奨される動作は、すべてのフラグをチェックすることです。

UnconstrainedMelody は、このメソッドにいくつかの名前付けオプションを提供します。

  • 含まれるもの
  • が含まれます
  • フラグあり/フラグあり
  • IsSet

「IsSet」という名前は機能しますが、フィードバックは歓迎です。この回避策は変更される可能性があり、UnconstrainedMelody はパッチまたは直接の提出を歓迎することに留意してください。

以上がC# での Enum 汎用制約の欠如を回避するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。