2014-02-06 27 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

你需要投MemberInfoPropertyInfo得到它的价值:的

..... 
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

它不起作用,因为使用我们必须得到每个财产的价值。当我尝试你的方法时,它抛出空异常。 – Yass

+0

好吧,我想知道这个问题,我以为你试图获得“物品”的价值。 – Amleth