C# 我怎样才能把它改写成泛型?

C# 我怎样才能把它改写成泛型?,c#,generics,C#,Generics,我有以下代码: public Component GetComponent(Type type) { return Components.FirstOrDefault(component => component.GetType() == type); } 调用者必须执行一个讨厌的强制转换来获取它传入的组件-如何将其重写为一个不太通用的强制转换?public component GetComponent(),其中T:component{ public C

我有以下代码:

 public Component GetComponent(Type type)
    {
        return Components.FirstOrDefault(component => component.GetType() == type);
    }
调用者必须执行一个讨厌的强制转换来获取它传入的组件-如何将其重写为一个不太通用的强制转换?

public component GetComponent(),其中T:component{
public Component GetComponent<T>() where T : Component{
    var type = typeof(T);
    return Components.FirstOrDefault(c => c.GetType() == type);
}
var类型=类型(T); 返回Components.FirstOrDefault(c=>c.GetType()==type); }
如果我正确阅读了您的问题,您可以将强制转换移动到函数中,并以这种方式执行

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

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

该类型在编译时确实是已知的。正如程序员注意的那样:
where
子句对于代码的运行不是必需的,但它确实帮助您避免意外地传入一个不是从组件派生的类型,并且永远不会保存在组件集合中。