Heim >Backend-Entwicklung >C++ >Wie kann ich das Fehlen generischer Enum-Einschränkungen in C# umgehen?

Wie kann ich das Fehlen generischer Enum-Einschränkungen in C# umgehen?

Susan Sarandon
Susan SarandonOriginal
2025-01-19 06:02:08611Durchsuche

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

Lösung des Problems fehlender generischer Aufzählungseinschränkungen in C#

In C# fehlen generische Einschränkungen für Aufzählungen, was zu Einschränkungen beim Erstellen von Erweiterungsmethoden für Aufzählungen führt. Es gibt jedoch einige Problemumgehungen.

Ein empfohlener Ansatz ist die Verwendung der UnconstrainedMelody-Bibliothek. Die Bibliothek ermöglicht die Angabe von „Pseudo“-Einschränkungen wie where T : struct, IEnumConstraint, die UnconstrainedMelody während des Post-Build-Prozesses in where T : struct, System.Enum konvertiert.

Eine weitere Problemumgehung besteht darin, die erforderliche Funktionalität manuell zu implementieren. Betrachten Sie beispielsweise die folgende IsSet-Methode:

<code class="language-csharp">public static bool IsSet<T>(this T input, T matchTo)
    where T : struct // 不是枚举约束
{
    return (input & matchTo) != 0;
}</code>

Wenn diese Methode mit mehreren Flags aufgerufen wird, liefert sie möglicherweise nicht das gewünschte Verhalten, da sie nur das Vorhandensein eines einzelnen Flags prüft.

Um dieses Problem zu lösen, können Sie eine zusätzliche Methode definieren:

<code class="language-csharp">public static bool HasFlags<T>(this T input, params T[] matchTo)
    where T : struct // 不是枚举约束
{
    foreach (var flag in matchTo)
    {
        if ((input & flag) == 0)
            return false;
    }

    return true;
}</code>

Diese Methode iteriert über die angegebenen Flags und gibt nur dann „true“ zurück, wenn alle Flags gesetzt sind.

Namenskonvention

Die geeignete Namenskonvention für diese Methoden hängt von Ihren Vorlieben ab. Mögliche Optionen sind:

  • Inklusive
  • Enthält
  • HasFlag (oder HasFlags)
  • IsSet

Die endgültige Entscheidung kann je nach spezifischem Kontext und Verwendung der Methode variieren.

Das obige ist der detaillierte Inhalt vonWie kann ich das Fehlen generischer Enum-Einschränkungen in C# umgehen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn