2012-03-27 19 views
12

क्या इसी तरह के निर्माण को लिखना संभव है?
मैं प्रकार टी के तर्क के लिए स्थापित करने के लिए, किसी भी तरह, डिफ़ॉल्ट मानजेनेरिक तरीके और वैकल्पिक तर्क

private T GetNumericVal<T>(string sColName, T defVal = 0) 
    { 
     string sVal = GetStrVal(sColName); 
     T nRes; 
     if (!T.TryParse(sVal, out nRes)) 
      return defVal; 

     return nRes; 
    } 

साथ ही चाहते हैं, मैं निम्नलिखित लिंक मिल गया: Generic type conversion FROM string
मुझे लगता है, इस कोड को काम करना चाहिए

private T GetNumericVal<T>(string sColName, T defVal = default(T)) where T : IConvertible 
{ 
    string sVal = GetStrVal(sColName); 
    try 
    { 
     return (T)Convert.ChangeType(sVal, typeof(T)); 
    } 
    catch (FormatException) 
    { 
     return defVal; 
    }    
} 

उत्तर

15

मैंने यह कोशिश नहीं की है लेकिन T defVal = 0 से T defVal = default(T)

4

यदि आप जानते हैं कि टी होगा ईए parameterless निर्माता आप इस तरह के रूप में नई टी() का उपयोग कर सकते हैं:

private T GetNumericVal<T>(string sColName, T defVal = new T()) where T : new() 

नहीं तो आप डिफ़ॉल्ट (टी)

private T GetNumericVal<T>(string sColName, T defVal = default(T)) 
4

उपयोग कर सकते हैं सवाल है कि डिफ़ॉल्ट मान

स्थापित करने के लिए काम करेगा उत्तर देने के लिए
private T GetNumericVal<T>(string sColName, T defVal = default(T)) 
{ 
    string sVal = GetStrVal(sColName); 
    T nRes; 
    if (!T.TryParse(sVal, out nRes)) 
     return defVal; 

    return nRes; 
} 

लेकिन आप स्थिर TryParse विधि को कॉल नहीं कर सकते हैं क्योंकि संकलक के पास इस स्थिर विधि को घोषित करने का कोई तरीका नहीं है।

+0

हां, मैं TryParse को कॉल नहीं कर सकता। लेकिन शायद कुछ ऐसा ही हो सकता है? शायद पैरामीटर टाइप करने के लिए कुछ बाधा जोड़ें (मेरा मतलब है 'कहां: ...')? यदि संख्यात्मक प्रकार कुछ रूपांतरित इंटरफेस को लागू करते हैं। – hardsky

+0

सीएलआर में "वर्चुअल स्टेटिक विधियों" की कोई अवधारणा नहीं है, संकलक एक प्रकार से स्थैतिक तरीकों का अनुमान नहीं लगा सकता है। जहां तक ​​मुझे पता है कि इसके लिए कोई साफ समाधान नहीं है। अधिक जानकारी के लिए –

+0

http://stackoverflow.com/questions/196661/calling-a-static-method-on-a-generic-type-parameter –