मैंने एक हैक-समाधान का उपयोग किया: इंटरफ़ेस। इंटरफेस में निर्मित मूल्य प्रकार और स्ट्रिंग प्रकार लागू कर दिया है देखें:
struct Int32 : IComparable, IFormattable, IConvertible, IComparable<int>, IEquatable<int>
class String : IComparable, ICloneable, IConvertible, IComparable<string>, IEnumerable<char>, IEnumerable, IEquatable<string>
struct Boolean : IComparable, IConvertible, IComparable<bool>, IEquatable<bool>
struct DateTime : IComparable, IFormattable, IConvertible, ISerializable, IComparable<DateTime>, IEquatable<DateTime>
struct UInt64 : IComparable, IFormattable, IConvertible, IComparable<ulong>, IEquatable<ulong>
struct Single : IComparable, IFormattable, IConvertible, IComparable<float>, IEquatable<float>
struct Byte : IComparable, IFormattable, IConvertible, IComparable<byte>, IEquatable<byte>
struct Char : IComparable, IConvertible, IComparable<char>, IEquatable<char>
struct Decimal : IFormattable, IComparable, IConvertible, IComparable<decimal>, IEquatable<decimal>
आप बाधाओं के लिए IComparable,IConvertible,IEquatable<T>
उपयोग कर सकते हैं। इस तरह:
public static void SetValue<T>(T value) where T : IComparable, IConvertible, IEquatable<T>
{
//TODO:
}
या आप बाधाओं के बिना डेटा समय की जाँच करने के प्रकार कोड का उपयोग कर सकते हैं।
public static void SetValue<T>(T value)
{
switch (Type.GetTypeCode(typeof(T)))
{
#region These types are not what u want, comment them to throw ArgumentOutOfRangeException
case TypeCode.Empty:
break;
case TypeCode.Object:
break;
case TypeCode.DBNull:
#endregion
break;
case TypeCode.Boolean:
break;
case TypeCode.Char:
break;
case TypeCode.SByte:
break;
case TypeCode.Byte:
break;
case TypeCode.Int16:
break;
case TypeCode.UInt16:
break;
case TypeCode.Int32:
break;
case TypeCode.UInt32:
break;
case TypeCode.Int64:
break;
case TypeCode.UInt64:
break;
case TypeCode.Single:
break;
case TypeCode.Double:
break;
case TypeCode.Decimal:
break;
case TypeCode.DateTime:
break;
case TypeCode.String:
break;
default:
throw new ArgumentOutOfRangeException();
}
}
याद रखें कि ऑब्जेक्ट प्रकार का उपयोग न करें लेकिन पैरामीटर प्रकार के लिए सामान्य प्रकार का उपयोग न करें। अन्यथा जब आप शून्य शून्य हो तो कोडलाइन Type.GetTypeCode(value.GetType())
पर आपको एक पूर्ण निष्कासन मिल सकता है।
आपके कार्यान्वयन के लिए, मूल्य-प्रकार और तार स्वीकार्य बनाता है जहां अन्य नहीं हैं? –