Heim >Backend-Entwicklung >C++ >Wie kann ich das Fehlen generischer Enum-Einschränkungen in C# umgehen?
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:
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!