我该如何重写这个通用名称?

时间:2013-08-11 01:16:36

标签: c# generics

我有以下代码:

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

调用者必须做一个讨厌的强制转换来获取它传入的组件 - 如何将其重写为无投射通用?

2 个答案:

答案 0 :(得分:3)

如果我正确地阅读了你的问题,你可以在功能中移动演员并以这种方式进行。

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

如果在编译时不知道该类型进入该函数(比如说,GetComponet()在一个循环中调用,其中类型作为参数传入),则无法获得强类型反对。

答案 1 :(得分:0)

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