2011-01-11 23 views
5

को संख्यात्मक ठोस प्रकार परिवर्तित मैं संख्यात्मक प्रकार के लिए एक विशेष बाधा निम्नलिखित मामले में काम करने के लिए कास्टिंग की अनुमति देता है कि हो, तो जानना चाहूंगासंख्यात्मक सामान्य प्रकार

Tvalue = (T)(object)value; 

लेकिन यह केवल T == byte पर काम करता है। अन्यथा मुझे InvalidCastException मिलता है।

टी हमेशा एक प्रकार का प्रकार होता है (जैसे छोटा, फ्लोट, और इसी तरह)।

+0

आपका उद्देश्य क्या है? क्या आप 'कन्वर्टर' का उपयोग कर सकते हैं? – Gabe

उत्तर

10

हां, आप केवल उसी प्रकार के मान को अनबॉक्स कर सकते हैं।

आप

Tvalue = (T) Convert.ChangeType(value, typeof(T)); 

उपयोग करने की कोशिश की है? यहां एक नमूना है:

using System; 

class Test 
{ 
    static void Main() 
    { 
     TestChange<int>(); 
     TestChange<float>(); 
     TestChange<decimal>(); 
    } 

    static void TestChange<T>() 
    { 
     byte b = 10; 
     T t = (T) Convert.ChangeType(b, typeof(T)); 
     Console.WriteLine("10 as a {0}: {1}", typeof(T), t); 
    } 
} 

वहाँ, यहाँ कोई बाधा है, हालांकि आप पहली बार एक पास के रूप में

where T : struct, IComparable<T> 

निर्दिष्ट कर सकते हैं। उस बाधा के पास काम करने वाले रूपांतरण के साथ कुछ लेना देना नहीं है - यह केवल कॉलर्स को अनुचित प्रकार का उपयोग करने से रोकने का प्रयास करेगा।

संबंधित मुद्दे