1

我有以下代码:

 public Component GetComponent(Type type)
    {
        return Components.FirstOrDefault(component => component.GetType() == type);
    }

调用者必须进行令人讨厌的强制转换才能获取它传入的组件 - 我如何将其重写为无强制转换的泛型?

4

2 回答 2

3

如果我正确阅读了您的问题,您可以在函数内移动演员表并这样做。

public T GetComponent<T>() where T : Component
{
    return (T)Components.FirstOrDefault(c => c.GetType() == typeof(T));
}

如果在编译时不知道类型进入函数(例如,GetComponet()在循环中调用类型作为参数传入的循环),则无法获取强类型对象。

于 2013-08-11T01:22:28.890 回答
0
public Component GetComponent<T>() where T : Component{
    var type = typeof(T);
    return Components.FirstOrDefault(c => c.GetType() == type);
}
于 2013-08-11T01:18:31.620 回答