2016-03-21 15 views
5

में प्रकार पैरामीटर 'टी' के रूप में इस्तेमाल नहीं किया जा सकता मैं निम्न विधि है:प्रकार 'टी' सामान्य प्रकार या विधि

protected T AttachComponent<T>(){ 
    T gsComponent = gameObject.GetComponent<T>(); 
    if(gsComponent == null){ 
     gsComponent = gameObject.AddComponent<T>(); 
    } 
    return gsComponent; 
} 

AddComponent लाइन मैं निम्न त्रुटि हो रही है पर:

The type 'T' cannot be used as type parameter 'T' in the generic type or method 'GameObject.AddComponent<T>()'. 
There is no boxing conversion or type parameter conversion from 'T' to 'UnityEngine.Component'. 

मुझे यकीन नहीं है कि मैं इस त्रुटि को ठीक करने के लिए क्या कर सकता हूं, मैं ऐसा क्यों नहीं कर सकता?

+0

आप निश्चित रूप से सी # में एक विस्तार ** के साथ इस ** करना होगा। Http://stackoverflow.com/a/35629303/294884 पढ़ने वाले किसी भी शुरुआती लोगों के लिए एक ट्यूटोरियल यहां आशा है कि यह मदद करता है! – Fattie

उत्तर

13

समस्या यह है कि AddObject विधि Component देता है। आपको संकलक को बताना होगा कि आपका टी वास्तव में घटक का एक प्रकार है।

अपने विधि करने के लिए एक सामान्य बाधा अनुलग्न करें, सुनिश्चित करें कि आपके T रों हैं Component रों

protected void AttachComponent<T>() where T : Component 
{ 
    // Your code. 
} 
+1

यह मुझे यह देता है: 'GameObject' मान्य बाधा नहीं है। एक बाधा के रूप में उपयोग किया जाने वाला एक प्रकार एक इंटरफेस, एक गैर-सीलबंद वर्ग या एक प्रकार पैरामीटर होना चाहिए। –

+0

@GetOffMyLawn क्षमा करें, मैंने आपके प्रश्न को थोड़ा गलत तरीके से पढ़ा है। मैंने अपने उत्तर को स्पष्ट करने के लिए अंतरिम में कोड अपडेट किया है। ध्यान दें कि बाधा अब 'घटक' पर है, न कि 'GameObject' (मेरी गलती) –

+0

कोई समस्या नहीं! क्या आप कृपया बता सकते हैं कि "कहां" हिस्सा क्या है? –

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