2009-07-24 15 views
9

मैं ऐसा क्यों कर सकते हैं:"टी के रूप में" त्रुटि क्यों होती है लेकिन (टी) के साथ कास्टिंग त्रुटि नहीं होती है?

public T GetMainContentItem<T>(string moduleKey, string itemKey) 
{ 
    return (T)GetMainContentItem(moduleKey, itemKey); 
} 

लेकिन इस:

public T GetMainContentItem<T>(string moduleKey, string itemKey) 
{ 
    return GetMainContentItem(moduleKey, itemKey) as T; 
} 

यह शिकायत है कि मैं सामान्य प्रकार काफी सीमित नहीं है, लेकिन फिर मैं उस नियम कास्टिंग पर लागू होगा लगता होगा "(टी)" के साथ भी।

उत्तर

23

क्योंकि 'टी' एक मूल्य के प्रकार और हो सकता है 'के रूप में टी' मूल्य-प्रकारों के लिए कोई मतलब नहीं है। आप यह कर सकते हैं:

public T GetMainContentItem<T>(string moduleKey, string itemKey) 
    where T : class 
{ 
    return GetMainContentItem(moduleKey, itemKey) as T; 
} 
+0

आपका उत्तर गलत है, तो आप मूल्य प्रकार पर डाली कर सकते हैं, इस पोस्ट और जॉन स्कीट द्वारा उत्तर देखें, परिणाम व्यर्थ हो जाएगा: http://stackoverflow.com/questions/496096/casting-vs-using-the -as-कीवर्ड-इन-द-clr – Mikhail

6

हैं टी एक मान प्रकार यह एक अपवाद है है, तो आप यकीन है कि टी या तो Nullable या एक वर्ग है बनाने की जरूरत है।

1

T एक मूल्य प्रकार है? यदि हां, तो अगर as ऑपरेटर विफल रहता है, यह null है, जो एक मान प्रकार में संग्रहीत नहीं किया जा सकता है वापस आ जाएगी।

0

यूरी Faktorovichs जवाब पर विस्तार:

public T GetMainContentItem<T>(string moduleKey, string itemKey) where T: class 
{ 
    return GetMainContentItem(moduleKey, itemKey) as T; 
} 

इस चाल करना होगा ...

0

क्योंकि as T मामले के रूप में (T) कि एक अपवाद फेंकता करने का विरोध किया है कि यह T पर कास्ट नहीं कर सकते हैं में null प्राप्त करता है। तो अगर TNullable या class नहीं है, यह null नहीं हो सकता है ... मुझे लगता है कि।

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