नहीं, आप इसे सी # जेनेरिक के साथ नहीं कर सकते हैं। हालांकि, अगर आप सकता है कार्य करें:
public static bool IsEnumFlagPresent<T>(T value, T lookingForFlag)
where T : struct
{
int intValue = (int) (object) value;
int intLookingForFlag = (int) (object) lookingForFlag;
return ((intValue & intLookingForFlag) == intLookingForFlag);
}
यह केवल enums जो int
का एक अंतर्निहित प्रकार है के लिए काम करेंगे, और यह कुछ हद तक अक्षम है क्योंकि यह बॉक्स मूल्य ... लेकिन यह काम करना चाहिए है।
आप एक निष्पादन प्रकार जाँच लें कि टी वास्तव में एक enum प्रकार है जोड़ सकते हैं (उदाहरण के लिए typeof(T).BaseType == typeof(Enum)
)
यहां एक संपूर्ण यह प्रदर्शन कार्यक्रम काम कर रहा है:
using System;
[Flags]
enum Foo
{
A = 1,
B = 2,
C = 4,
D = 8
}
class Test
{
public static Boolean IsEnumFlagPresent<T>(T value, T lookingForFlag)
where T : struct
{
int intValue = (int) (object) value;
int intLookingForFlag = (int) (object) lookingForFlag;
return ((intValue & intLookingForFlag) == intLookingForFlag);
}
static void Main()
{
Console.WriteLine(IsEnumFlagPresent(Foo.B | Foo.C, Foo.A));
Console.WriteLine(IsEnumFlagPresent(Foo.B | Foo.C, Foo.B));
Console.WriteLine(IsEnumFlagPresent(Foo.B | Foo.C, Foo.C));
Console.WriteLine(IsEnumFlagPresent(Foo.B | Foo.C, Foo.D));
}
}
स्रोत
2009-06-12 16:26:02
बस एक ध्यान दें: सी # में 4 Enum struct एक मानक HasFlag() विधि प्रदान करता है। –