अंतर्निहित प्रकारों के लिए, आप टाइपकोड एन्यूमरेशन का उपयोग कर सकते हैं। कृपया ध्यान दें कि गेटटाइप () एक तरह से धीमा है, लेकिन संभवतः अधिकांश स्थितियों में प्रासंगिक नहीं है।
switch (Type.GetTypeCode(someObject.GetType()))
{
case TypeCode.Boolean:
break;
case TypeCode.Byte:
break;
case TypeCode.Char:
break;
}
कस्टम प्रकारों के लिए, आप अपनी स्वयं की गणना बना सकते हैं, और या तो एक इंटरफ़ेस या आधार वर्ग जिसमें अमूर्त संपत्ति या विधि हो ...
संपत्ति का सार वर्ग कार्यान्वयन
public enum FooTypes { FooFighter, AbbreviatedFool, Fubar, Fugu };
public abstract class Foo
{
public abstract FooTypes FooType { get; }
}
public class FooFighter : Foo
{
public override FooTypes FooType { get { return FooTypes.FooFighter; } }
}
विधि का सार वर्ग कार्यान्वयन
public enum FooTypes { FooFighter, AbbreviatedFool, Fubar, Fugu };
public abstract class Foo
{
public abstract FooTypes GetFooType();
}
public class FooFighter : Foo
{
public override FooTypes GetFooType() { return FooTypes.FooFighter; }
}
संपत्ति का इंटरफ़ेस कार्यान्वयन
public enum FooTypes { FooFighter, AbbreviatedFool, Fubar, Fugu };
public interface IFooType
{
FooTypes FooType { get; }
}
public class FooFighter : IFooType
{
public FooTypes FooType { get { return FooTypes.FooFighter; } }
}
विधि का इंटरफ़ेस कार्यान्वयन
public enum FooTypes { FooFighter, AbbreviatedFool, Fubar, Fugu };
public interface IFooType
{
FooTypes GetFooType();
}
public class FooFighter : IFooType
{
public FooTypes GetFooType() { return FooTypes.FooFighter; }
}
मेरे सहकर्मियों में से एक ने मुझे इसके बारे में भी बताया: इसका यह फायदा है कि आप इसका उपयोग वस्तुतः किसी भी प्रकार की वस्तु के लिए कर सकते हैं, केवल उन लोगों के लिए नहीं जिन्हें आप परिभाषित करते हैं। यह थोड़ा बड़ा और धीमा होने का नुकसान है।
पहले एक स्थिर वर्ग को इस तरह परिभाषित करें:
public static class TypeEnumerator
{
public class TypeEnumeratorException : Exception
{
public Type unknownType { get; private set; }
public TypeEnumeratorException(Type unknownType) : base()
{
this.unknownType = unknownType;
}
}
public enum TypeEnumeratorTypes { _int, _string, _Foo, _TcpClient, };
private static Dictionary<Type, TypeEnumeratorTypes> typeDict;
static TypeEnumerator()
{
typeDict = new Dictionary<Type, TypeEnumeratorTypes>();
typeDict[typeof(int)] = TypeEnumeratorTypes._int;
typeDict[typeof(string)] = TypeEnumeratorTypes._string;
typeDict[typeof(Foo)] = TypeEnumeratorTypes._Foo;
typeDict[typeof(System.Net.Sockets.TcpClient)] = TypeEnumeratorTypes._TcpClient;
}
/// <summary>
/// Throws NullReferenceException and TypeEnumeratorException</summary>
/// <exception cref="System.NullReferenceException">NullReferenceException</exception>
/// <exception cref="MyProject.TypeEnumerator.TypeEnumeratorException">TypeEnumeratorException</exception>
public static TypeEnumeratorTypes EnumerateType(object theObject)
{
try
{
return typeDict[theObject.GetType()];
}
catch (KeyNotFoundException)
{
throw new TypeEnumeratorException(theObject.GetType());
}
}
}
और फिर आप इसे इस तरह से उपयोग कर सकते हैं:
switch (TypeEnumerator.EnumerateType(someObject))
{
case TypeEnumerator.TypeEnumeratorTypes._int:
break;
case TypeEnumerator.TypeEnumeratorTypes._string:
break;
}