C# 从列表中返回特定类型

C# 从列表中返回特定类型,c#,.net,C#,.net,我正在为一个游戏编写一个组件实体系统,我遇到了一些障碍。我有一个列表派生类调用ComponentList,其中包含实体的所有组件。我还有一个方法返回一个名为GetComponent的组件。它通过一个字符串名来实现这一点 public Component GetComponent(string name) { foreach (var c in this) { if (c.Name == name)

我正在为一个游戏编写一个组件实体系统,我遇到了一些障碍。我有一个
列表
派生类调用ComponentList,其中包含实体的所有组件。我还有一个方法返回一个名为GetComponent的组件。它通过一个字符串名来实现这一点

    public Component GetComponent(string name)
    {
        foreach (var c in this)
        {
            if (c.Name == name)
                return c;
        }
        throw new Exception("Component " + name + " does not exist.");
    }
然而,当从组件派生一个类时,将其粘贴到组件列表中,然后将其拉出,我必须转换为该类型,这有点不方便

TestComponent t1 = (TestComponent)Entity.ComponentList.GetComponent("Test1");
我知道有一些特殊的,神奇的方法来使用的类型,但我不知道如何使用它,或者,如果它甚至适用于这种情况。有什么建议吗?

代码:

public T GetComponent<T>(string name) where T : Component
{
    var result = this.FirstOrDefault(c => c.Name == name);
    if( result == null )
        throw new Exception("Component " + name + " does not exist.");
    return (T) result;
}
public T GetComponent(字符串名称),其中T:Component
{
var result=this.FirstOrDefault(c=>c.Name==Name);
如果(结果==null)
抛出新异常(“组件“+name+”不存在。”);
返回(T)结果;
}
用法:

var testComponent = componentFactory.GetComponent<TestComponent>("Test1");
var testComponent=componentFactory.GetComponent(“Test1”);

启用此功能的语言功能称为
generics
,您可以在上面(以及许多其他地方;只需在谷歌上搜索“generics C#”)

了解更多有关它的信息。它给我带来了以下错误:无法隐式地将类型“ConsoleApplication1.Component”转换为“T”。存在显式转换(是否缺少转换?)对,缺少转换。修好了,非常感谢!你能解释一下这是怎么回事吗,或者至少给我一页解释整个交易的内容?我甚至不知道它叫什么(这是一个丰富的解释“泛型”的在线资源,只要谷歌一点,你就会得到回报。谢谢你!我从来都不知道它们,但是,当你需要处理类型时,它们真的很有用。非常感谢你的帮助!