.net 4.0 Reflection конвертирует объект в определенный тип - PullRequest
0 голосов
/ 07 октября 2011

Моя проблема довольно простаПредположим, у меня есть эти классы:

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);
}

У меня вопрос, как я могу обратиться к соответствующей коллекции, в данном случае это Collection<B> илиCollection<C>, в зависимости от значения fieldNameЗаранее благодарен

Ответы [ 2 ]

0 голосов
/ 07 октября 2011

Вы не можете иметь статически типизированный объект в своем методе, когда определяете свойство, которое будет вызываться во время выполнения. Но время выполнения obj соответствует фактическому типу вашей собственности.

0 голосов
/ 07 октября 2011

Вы можете разыграть его:

var collection = (Collection<B>)(infor.GetValue(a,null));

EDIT:

если вы используете 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)....
...