Получить класс и тип объекта из запроса списка linq

Я пытаюсь получить базовый тип из запроса linq, работающего против типа GetFields метод. В моем примере у меня есть:

string mClass = "Computer"; //match string
var t = typeof(SystemMonitoringClass);
var monitoringClass = (SystemMonitoringClass)t.GetFields().First(x => x.Name == mClass); 

Приведение в моей 3-й строке не удается, так как я не могу преобразовать возвращаемый тип FieldInfo в то, что я ищу. Итак, после нахождения правильного поля, как я могу получить реальный объект. Это временное решение связано с изменением нового SDK SCOM 2012 SystemMonitoringClass от перечисления до класса. Если у кого-то есть лучший подход для сопоставления строки и получения фактического объекта или поля мониторинга в этом случае, это также сработает.

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

1 ответ

Решение

Вы должны отделить понятия "поле" от "значения этого поля для конкретного экземпляра". Ты хочешь FieldInfo.GetValue например,

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

РЕДАКТИРОВАТЬ: я отмечаю, что SystemMonitoringClass.Computer фактически объявлено, чтобы вернуть значение типа SystemClass не SystemMonitoringClass - так что вы можете изменить свой состав соответствующим образом, как я уже выше.

Другие вопросы по тегам