2016-03-21 16 views
5

Mam następujący sposób:typu „T” nie może być używany jako typ parametru „t” w ogólnym typie lub metodzie

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

W wierszu otrzymuję następujący błąd 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'. 

Nie jestem pewien, co mogę zrobić, aby naprawić ten błąd, dlaczego nie mogę tego zrobić?

+0

to na pewno to zrobić z rozszerzeniem ** ** w C#. Oto samouczek dla każdego początkującego czytającego http://stackoverflow.com/a/35629303/294884 Mam nadzieję, że to pomoże! – Fattie

Odpowiedz

13

Problem polega na tym, że metoda AddObject zwraca wartość Component. Musisz powiedzieć kompilatorowi, że twoja T jest faktycznie typem Komponentu.

Attach rodzajowe ograniczenie do metody, aby upewnić się, że są ComponentT s s

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

To daje mi to: "GameObject" nie jest prawidłowym ograniczeniem. Typ używany jako ograniczenie musi być interfejsem, niezablokowaną klasą lub parametrem typu. –

+0

@GetOffMyLawn Przepraszam, źle odczytałem twoje pytanie. Zaktualizowałem kod w międzyczasie, aby wyjaśnić moją odpowiedź. Zauważ, że ograniczenie jest teraz na 'Komponent', a nie' GameObject' (mój błąd) –

+0

Nie ma problemu! Czy mógłbyś wyjaśnić, po co jest część "gdzie"? –

Powiązane problemy