C# 从参数获取泛型类型
我正在制作XNA内容加载器: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
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对我的随机答案投反对票?保持优雅。