C#-将对象强制转换为IList<;T>;基于类型
我正在尝试进行一些反思,并对如何将结果对象强制转换为IList提出了一个问题 以下是反映:C#-将对象强制转换为IList<;T>;基于类型,c#,generics,reflection,C#,Generics,Reflection,我正在尝试进行一些反思,并对如何将结果对象强制转换为IList提出了一个问题 以下是反映: private void LoadBars(Type barType) { // foo has a method that returns bars Type foo = typeof(Foo); MethodInfo method = foo.GetMethod("GetBars") .MakeGenericMethod(bar); object o
private void LoadBars(Type barType)
{
// foo has a method that returns bars
Type foo = typeof(Foo);
MethodInfo method = foo.GetMethod("GetBars")
.MakeGenericMethod(bar);
object obj = method.Invoke(foo, new object[] { /* arguments here */ });
// how can we cast obj to an IList<Type> - barType
}
private void加载条(类型barType)
{
//foo有一个返回条的方法
类型foo=类型of(foo);
MethodInfo method=foo.GetMethod(“GetBars”)
.MakeGenericMethod(bar);
object obj=method.Invoke(foo,新对象[]{/*这里的参数*/});
//我们如何将obj转换为IList-barType
}
我们如何从barType参数强制转换method.Invoke的结果到IList类型?强制转换的要点通常是告诉编译器您有一些额外的信息—您在编译时知道一些东西。你不知道这里的信息-你只知道它在执行时
铸造后,您希望如何处理该值?诚然,有时它会很有用——当您必须使用泛型接口时,即使您想要获取不需要类型参数的成员(例如
IList中的Count
)。但是,如果您不想这样做,那么如果您能提供更多信息,这将非常有帮助。在.NET 4.0中,您可以使用表达式树来实现这一点。专用void loadbar()
private void LoadBars<T>()
{
Type barType = typeof(T);
// foo has a method that returns bars
Type foo = typeof(Foo);
MethodInfo method = foo.GetMethod("GetBars")
.MakeGenericMethod(bar);
IList<T> obj = (IList<T>)method.Invoke(foo, new object[] { /* arguments here */ });
}
{
类型barType=类型(T);
//foo有一个返回条的方法
类型foo=类型of(foo);
MethodInfo method=foo.GetMethod(“GetBars”)
.MakeGenericMethod(bar);
IList obj=(IList)method.Invoke(foo,new object[]{/*arguments here*/});
}
只有在函数调用方在编译时而不是运行时创建新的barType时,强制转换才有意义。一旦这是真的,您可以将函数模板化为:
private IList<T> LoadBars<T>()
{
...
return obj as IList<T>;
}
private IList加载条()
{
...
返回obj作为IList;
}
我刚刚解决完这个问题。
确实,您不能将对象强制转换为通用IList,但可以通过调用List对象的“ToArray”方法将其转换为强类型数组
从另一个博客盗取的解决方案。
ToArrayMethod=obj.GetType().GetMethod(“ToArray”)
System.Array stronglyTypedArray=(System.Array)到ArrayMethod.Invoke(obj,null) 确切地说,但是现在必须在编译时知道T。我们希望迭代列表作为它的强制类型。我承认这没有任何意义,我们需要告诉编译器类型,以便它生成所需的内容。这个问题的目的是探索一个edge案例,它实际上是一个围绕LOB不规则性的破解。谢谢你为我清楚地介绍了这个问题。