.net 4.0反射将对象转换为特定类型

时间:2011-10-07 09:10:38

标签: c# .net c#-4.0

我的问题很简单 假设我有这些课程:

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值
提前谢谢

2 个答案:

答案 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的运行时间是您房产的实际类型。