从linq列表查询中获取类和对象类型

时间:2013-07-16 17:36:35

标签: c# linq scom

我试图从类型的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从枚举更改为类。如果某人有更好的方法来匹配字符串并获得实际的监控对象或字段,那么这也可以。

http://msdn.microsoft.com/en-us/library/hh326622.aspx

1 个答案:

答案 0 :(得分:1)

您需要将“字段”的概念与“特定实例的字段值”分开。你想要FieldInfo.GetValue,例如

var monitoringClass = (SystemClass) field.GetValue(null);

编辑:我注意到SystemMonitoringClass.Computer实际上被声明为返回SystemClass类型的值,而不是SystemMonitoringClass - 因此您可能需要适当地更改您的演员,就像我上面所说的那样。