C# 从参数获取泛型类型

C# 从参数获取泛型类型,c#,generics,xna,C#,Generics,Xna,我正在制作XNA内容加载器: public object[] LoadIt(KeyValuePair<Type,string>[] resources, ContentManager content) { object[] result = new object[resources.Length]; for(int i=0;i<result.Length;i++) { result[i] = content.Load<resourc

我正在制作XNA内容加载器:

public object[] LoadIt(KeyValuePair<Type,string>[] resources, ContentManager content)
{
    object[] result = new object[resources.Length];
    for(int i=0;i<result.Length;i++)
    {
        result[i] = content.Load<resources[i].Key>(resources[i].Value);
    }
    return result;
}
public object[]LoadIt(KeyValuePair[]resources,ContentManager内容)
{
object[]result=新对象[resources.Length];

对于(inti=0;i您不能这样做,因为类型不是编译时常量

您可以做的是使用反射而不产生问题,因为您只需要
对象
作为返回值:

public object[] LoadIt(KeyValuePair<Type,string>[] resources, ContentManager content)
{
    object[] result = new object[resources.Length];
    for(int i=0;i<result.Length;i++)
    {
        result[i] = content
                      .GetType()
                      .GetMethod("Load")
                      .MakeGenericMethod(resources[i].Key)
                      .Invoke(content, new object[] { resources[i].Value });
    }
    return result;
}
public object[]LoadIt(KeyValuePair[]resources,ContentManager内容)
{
object[]result=新对象[resources.Length];

对于(inti=0;i您不能这样做,因为类型不是编译时常量

您可以做的是使用反射而不产生问题,因为您只需要
对象
作为返回值:

public object[] LoadIt(KeyValuePair<Type,string>[] resources, ContentManager content)
{
    object[] result = new object[resources.Length];
    for(int i=0;i<result.Length;i++)
    {
        result[i] = content
                      .GetType()
                      .GetMethod("Load")
                      .MakeGenericMethod(resources[i].Key)
                      .Invoke(content, new object[] { resources[i].Value });
    }
    return result;
}
public object[]LoadIt(KeyValuePair[]resources,ContentManager内容)
{
object[]result=新对象[resources.Length];

对于(int i=0;i这是针对您的问题的XNA特定答案,但是您不需要这样做!

您可以将其替换为:

content.Load<resources[i].Key>(resources[i].Value);


当然,有人可能会问你为什么要制作一个“contentloader”?我没有足够的关于你在做什么的信息-但看起来这可能是不必要的。XNA的
ContentManager
已经实现了()缓存加载的对象-所以你可能(也应该)这样做直接使用即可。

这是针对您的问题的XNA特定答案,但是您不需要这样做!

您可以将其替换为:

content.Load<resources[i].Key>(resources[i].Value);


当然,有人可能会问你为什么要制作一个“contentloader”?我没有足够的关于你在做什么的信息-但看起来这可能是不必要的。XNA的
ContentManager
已经实现了()缓存加载的对象-所以你可能(也应该)这样做直接使用它。

一种方法是使用反射调用方法:您能显示ContentManager类的加载方法吗?加载方法:在使用反射调用方法之前,已询问了Quesion。一种方法的可能副本是使用反射调用方法:您能显示ContentManager类的加载方法吗?加载方法:在调用之前已询问Quesion我认为他的推理可能是针对动态对象的动态内容。@ShahroozJefri对我的随机答案投反对票?保持优雅。我认为他的推理可能是针对动态对象的动态内容。@ShahroozJefri对我的随机答案投反对票?保持优雅。