Was ich tun möchte, ist so etwas wie folgt: Ich habe enums mit kombinierten markierten Werten.Wer kennt eine gute Problemumgehung für das Fehlen einer enum generischen Einschränkung?
public static class EnumExtension
{
public static bool IsSet<T>(this T input, T matchTo)
where T:enum //the constraint I want that doesn't exist in C#3
{
return (input & matchTo) != 0;
}
}
So könnte ich tun:
MyEnum tester = MyEnum.FlagA | MyEnum.FlagB
if(tester.IsSet(MyEnum.FlagA))
//act on flag a
Leider C# 's generic wo Einschränkungen keine Enum Einschränkung haben, nur Klasse und Struktur. C# sieht Enums nicht als Strukturen (obwohl sie Werttypen sind), daher kann ich keine Erweiterungstypen wie diese hinzufügen.
Wer kennt einen Workaround?
Keith: Download-Version 0.0.0.2 von UnconstrainedMelody - Ich habe HasAll und HasAny implementiert. Genießen. –
Was meinen Sie mit "C# sieht Enums als Strukturen nicht"? Sie können Aufzählungstypen als Typparameter verwenden, die auf "struct" beschränkt sind. – Timwi
Überprüfen Sie diesen Artikel hier: http://www.codeproject.com/KB/cs/ExtendEnum.aspx 'IsValidEnumValue' oder 'IsFlagsEnumDefined' Methoden sind wahrscheinlich die Antwort auf Ihre Frage. – dmihailescu