我有一个带有自定义枚举的类:
public enum Capabilities{
PowerSave= 1,
PnP =2,
Shared=3, }
我的类(class)
public class Device
{
....
public Capabilities[] DeviceCapabilities
{
get { // logic goes here}
}
有没有办法在运行时使用反射来获取这个字段的值?我尝试了以下但得到空引用异常
PropertyInfo[] prs = srcObj.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);
foreach (PropertyInfo property in prs)
{
if (property.PropertyType.IsArray)
{
Array a = (Array)property.GetValue(srcObj, null);
}
}
编辑:感谢您的回答,我真正需要的是一种无需指定枚举类型即可动态获取值的方法。像这样的东西:
string enumType = "enumtype"
var property = typeof(Device).GetProperty(enumType);
这可能吗?
下面应该做你想做的。
var property = typeof(Device).GetProperty("DeviceCapabilities");
var deviceCapabilities = (Capabilities[])property.GetValue(device);
请注意方法 Object PropertyInfo.GetValue(Object)
是 .NET 4.5 中的新方法。在以前的版本中,您必须为索引添加一个额外的参数。
var deviceCapabilities = (Capabilities[])property.GetValue(device, null);
我是一名优秀的程序员,十分优秀!