我需要获取特定对象属性的值,但不知道对象的类型

时间:2011-08-15 19:39:25

标签: c# reflection

我有一个c#对象,我不知道这个对象的类型。 (即对象o) 我所知道的是,这个对象有一个名为'ID'的成员,类型为int。

我想获得这个属性的价值,但我对反思不够好......

我可以获得此对象的类型和成员:

Type type = obj.GetType();
System.Reflection.MemberInfo[] member = type.GetMember("ID");

...但不知道下一步该做什么: - )

提前感谢您的帮助 马里乌什

4 个答案:

答案 0 :(得分:4)

您可以使用:

Type type = obj.GetType();
PropertyInfo property = type.GetProperty("ID");
int id = (int) property.GetValue(obj, null);
  • 使用PropertyInfo因为您知道它是一个属性,这使事情变得更容易
  • 调用GetValue获取值,传入obj作为属性的目标,传递null作为索引器参数(因为它是属性,而不是索引)
  • 将结果投放到int,因为您已经知道它将是int

Jared建议使用dynamic也很好,如果你使用的是C#4和.NET 4,虽然为了避免所有括号我可能会把它写成:

dynamic d = obj;
int id = d.ID;

(除非您出于某种原因需要单个表达式)。

答案 1 :(得分:4)

这是公共财产吗?那么最简单的方法是使用dynamic

int value = ((dynamic)obj).ID;

答案 2 :(得分:2)

你能用C#4吗?在这种情况下,您可以使用dynamic

dynamic dyn = obj;
int id = dyn.ID;

答案 3 :(得分:1)

public class TestClass
{
    public TestClass()
    {
        // defaults
        this.IdField = 1;
        this.IdProperty = 2;
    }

    public int IdField;
    public int IdProperty { get; set; }
}

// here is an object obj and you don't know which its underlying type
object obj = new TestClass();
var idProperty = obj.GetType().GetProperty("IdProperty");
if (idProperty != null)
{
    // retrieve it and then parse to int using int.TryParse()
    var intValue = idProperty.GetValue(obj, null);
}

var idField = obj.GetType().GetField("IdField");
if (idField != null)
{
    // retrieve it and then parse to int using int.TryParse()
    var intValue = idField.GetValue(obj);
}