我的问题很简单 假设我有这些课程:
public class A
{
public Collection<B> B { get; set; }
public Collection<C> C { get; set; }
}
public class B
{
public int IntB { get; set; }
}
public class C
{
public string StringC { get; set; }
}
我写了一个函数:
public void GetValue(string fieldName){
A a = new A();
PropertyInfo infor = typeof(A).GetProperty(fieldName);
object obj = infor.GetValue(a,null);
}
我的问题是如何将obj转换为相应的Collection,在这种情况下为Collection<B>
或Collection<C>
,具体取决于fieldName值
提前谢谢
答案 0 :(得分:0)
你可以施展它:
var collection = (Collection<B>)(infor.GetValue(a,null));
编辑:
如果在结果集合上使用LINQ,则可能需要使用OfType(链接:http://msdn.microsoft.com/en-us/library/bb360913.aspx)和/或Cast(链接:http://msdn.microsoft.com/en-us/library/bb341406.aspx) 喜欢
var collection = getCollection(a,null));
collection.OfType<B>.Select(b => b.IntB)....
答案 1 :(得分:0)
当您确定将在运行时调用的属性时,您的方法中不能有静态类型的对象。但obj
的运行时间是您房产的实际类型。