【发布时间】:2016-06-18 15:23:43
【问题描述】:
我刚刚学习使用 C# 泛型,Unity 给了我一个曲线球。我有这个方法,我打算向其中传递一个列表或一个数组并返回一个可变对象类型的项目(可能是 GameObject、ParticleSystem 等,具体取决于数组内容):
private T RetrieveItem<T>(IList<T> list) where T : Component
{
for (int i = 0; i < list.Count; i++)
{
if (!list[i].GetComponent<GameObject>().activeInHierarchy)
{
return list[i];
}
}
return list[0];
}
这编译得很好,但是当我尝试使用它时:
GameObject obj = RetrieveItem<GameObject>(myListOrArray);
我收到错误“类型‘UnityEngine.GameObject’不能用作泛型类型或方法‘J_ObjectPool.RetrieveItem(IList)’中的类型参数‘T’。‘UnityEngine.GameObject’没有隐式引用转换' 到 'UnityEngine.Component'。”
我尝试使用 Monobehaviour 作为约束并得到相同的错误(无法将 GameObject 转换为 Monobehaviour),我尝试使用 UnityEngine.Object 但得到相同的错误,此外我无法使用 GetComponent 方法.最后我尝试使用 GameObject 作为约束,但编译器抱怨“GameObject 不是有效的约束”。
有什么想法可以让它发挥作用吗?谢谢。
【问题讨论】: