如何使用反射获取属性值

Ice*_*ind 39 c# reflection

我有以下代码:

FieldInfo[] fieldInfos;
fieldInfos = GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance);
Run Code Online (Sandbox Code Playgroud)

我想要做的是使用反射在运行时获取当前实例化实例的一个属性的值.我怎样才能做到这一点?

Jam*_*son 87

这样的事情应该有效:

var value = (string)GetType().GetProperty("SomeProperty").GetValue(this, null);
Run Code Online (Sandbox Code Playgroud)


Dav*_*Yaw 22

尝试使用GetProperties方法,它应该为您提供属性,而不是字段.

要检索值,请执行以下操作:

object foo = ...;
object propertyValue = foo.GetType().GetProperty("PropertyName").GetValue(foo, null);
Run Code Online (Sandbox Code Playgroud)

这是使用GetProperty,它只返回一个PropertyInfo对象,而不是它们的数组.然后我们调用GetValue,它接受对象的参数来从中检索值(PropertyInfo特定于类型,而不是实例).GetValue的第二个参数是一个索引器数组,用于索引属性,我假设您感兴趣的属性不是索引属性.(索引属性可以让您list[14]检索列表的第14个元素.)