Lo que quiero hacer es algo como esto: Tengo enumeraciones con valores marcados combinados.¿Alguien sabe una buena solución para la falta de una restricción genérica enum?
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;
}
}
Entonces yo podría hacer:
MyEnum tester = MyEnum.FlagA | MyEnum.FlagB
if(tester.IsSet(MyEnum.FlagA))
//act on flag a
Desafortunadamente C# 's genérico donde las restricciones tienen ninguna restricción de enumeración, única clase y estructura. C# no ve las enumeraciones como estructuras (aunque sean tipos de valores), así que no puedo agregar tipos de extensión como este.
¿Alguien sabe una solución?
Keith: descargue la versión 0.0.0.2 de UnconstrainedMelody - He implementado HasAll y HasAny. Disfrutar. –
¿Qué quiere decir con "C# no ve las enumeraciones como estructuras"? Puede usar tipos de enumeración como parámetros de tipo que están limitados a 'struct' muy bien. – Timwi
revise este artículo aquí: http://www.codeproject.com/KB/cs/ExtendEnum.aspx 'IsValidEnumValue' o 'IsFlagsEnumDefined' son probablemente la respuesta a su pregunta. – dmihailescu