2014-02-06 4 views
1

У меня есть несколько доменов объектов что-то вроде:Получить C# значений свойств для нескольких объектов

public class Person() 
{ 
public int age { get; set; } 
public string city{ get; set; } 
} 

public class Company() 
    { 
    public string name{ get; set; } 
    public string address{ get; set; } 
    } 

У меня есть еще один класс, который вызывает MyMethod, как указано ниже.

public class CallTest() 
{ 
Person p= new Person{age=10,city="dd"}; 
Company c= new Company{name="mynae",address="myaddress"}; 
MyMethod(p); 
MyMethod(c); 
} 

mi.Name дает мне название свойства. Но как мне получить значение свойства?

public class MyMethod(object obj) 
{ 
    Type t = obj.GetType(); 
    PropertyInfo prop = t.GetProperty("Items"); 
    foreach (MemberInfo mi in t.GetMembers()) 
      { 
        if (mi.MemberType == MemberTypes.Property) 
        { 
         var x = mi.Name; 
        } 
       } 
} 
+0

возможно дубликат [Получить значение из свойства общего объекта путем отражения] (http://stackoverflow.com/questions/5998832/get-value-from-a-generic-object-property-by-reflection) –

ответ

2

Вам нужно бросить MemberInfo к PropertyInfo, чтобы получить это значение:

..... 
if (mi.MemberType == MemberTypes.Property) 
{ 
    var x = mi.Name; 
    var value = ((PropertyInfo) mi).GetValue(obj); 
} 
..... 
+0

Спасибо, что работает. – Yass

0

Чтобы получить значение свойства obj.Items вы можете использовать следующий код

public class MyMethod(object obj) 
{ 
    Type t = obj.GetType(); 
    PropertyInfo prop = t.GetProperty("Items"); 
    var x = prop.GetValue(obj, null); 
} 
+0

Это не работает, beca мы должны получить значение каждого свойства. Когда я попробовал ваш подход, он выбрасывает исключение. – Yass

+0

Хорошо, я пропустил вопрос, я думал, что вы пытаетесь получить значение «Элементы». – Amleth

Смежные вопросы