我有以下代码:
public Component GetComponent(Type type)
{
return Components.FirstOrDefault(component => component.GetType() == type);
}
调用者必须进行令人讨厌的强制转换才能获取它传入的组件 - 我如何将其重写为无强制转换的泛型?
如果我正确阅读了您的问题,您可以在函数内移动演员表并这样做。
public T GetComponent<T>() where T : Component
{
return (T)Components.FirstOrDefault(c => c.GetType() == typeof(T));
}
如果在编译时不知道类型进入函数(例如,GetComponet()
在循环中调用类型作为参数传入的循环),则无法获取强类型对象。
public Component GetComponent<T>() where T : Component{
var type = typeof(T);
return Components.FirstOrDefault(c => c.GetType() == type);
}