Heim >Backend-Entwicklung >C++ >Wie können wir das Fehlen generischer Enum-Einschränkungen in C# umgehen?
Bei der C#-Programmierung kann das Fehlen generischer Enum-Einschränkungen zu Herausforderungen führen, wenn versucht wird, bestimmte Operationen an Flag-Enumerationen auszuführen. Um dieses Problem zu lösen, schauen wir uns eine Problemumgehung mithilfe der UnconstrainedMelody-Bibliothek an.
UnconstrainedMelody wandelt „pseudo“ generische Einschränkungen in „echte“ Einschränkungen um. Zum Beispiel wäre es:
<code>where T : struct, IEnumConstraint</code>
Konvertieren in:
<code>where T : struct, System.Enum</code>
Dadurch können Entwickler Methoden definieren wie:
<code>public static bool IsSet<T>(this T input, T matchTo) where T : System.Enum { return (input & matchTo) != 0; }</code>
Mit dieser Methode können Sie:
<code>MyEnum tester = MyEnum.FlagA | MyEnum.FlagB; if (tester.IsSet(MyEnum.FlagA)) // 对标志 a 执行操作</code>
UnconstrainedMelody lässt sich nahtlos integrieren, nachdem die Post-Build-Schritte abgeschlossen sind.
Berücksichtigen Sie jedoch das Verhalten der Methode „IsSet“, wenn mehrere Flags angegeben sind:
<code>tester.IsSet(MyFlags.A | MyFlags.C);</code>
Sollte überprüft werden, ob alle Flags gesetzt sind oder nur eines? Das empfohlene Verhalten besteht darin, alle Flags zu überprüfen.
UnconstrainedMelody bietet mehrere Benennungsoptionen für diese Methode:
Der Name „IsSet“ funktioniert zwar, Feedback ist jedoch willkommen. Bitte beachten Sie, dass sich diese Problemumgehung ändern kann und UnconstrainedMelody Patches oder direkte Einsendungen begrüßt.
Das obige ist der detaillierte Inhalt vonWie können wir das Fehlen generischer Enum-Einschränkungen in C# umgehen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!