我试图从类型的GetFields
方法运行的linq查询中获取基础类型。在我的例子中,我有:
string mClass = "Computer"; //match string
var t = typeof(SystemMonitoringClass);
var monitoringClass = (SystemMonitoringClass)t.GetFields().First(x => x.Name == mClass);
我的第3行中的转换失败,因为我无法将返回类型FieldInfo
转换为我正在寻找的内容。所以在找到正确的字段后,我怎样才能得到实际的对象。此解决方法是由于新的SCOM 2012 SDK将SystemMonitoringClass
从枚举更改为类。如果某人有更好的方法来匹配字符串并获得实际的监控对象或字段,那么这也可以。
答案 0 :(得分:1)
您需要将“字段”的概念与“特定实例的字段值”分开。你想要FieldInfo.GetValue
,例如
var monitoringClass = (SystemClass) field.GetValue(null);
编辑:我注意到SystemMonitoringClass.Computer
实际上被声明为返回SystemClass
类型的值,而不是SystemMonitoringClass
- 因此您可能需要适当地更改您的演员,就像我上面所说的那样。