我有一个c#对象,我不知道这个对象的类型。 (即对象o) 我所知道的是,这个对象有一个名为'ID'的成员,类型为int。
我想获得这个属性的价值,但我对反思不够好......
我可以获得此对象的类型和成员:
Type type = obj.GetType();
System.Reflection.MemberInfo[] member = type.GetMember("ID");
...但不知道下一步该做什么: - )
提前感谢您的帮助 马里乌什
答案 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);
}