2013-07-16 2 views
0

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

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

+0

Что такое пустые голоса? – Warz

ответ

1

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

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

EDIT: Я отмечаю, что фактически объявляется возвращать значение типа SystemClass, не SystemMonitoringClass - так что вы можете захотеть изменить свой актерский надлежащим образом, как я уже выше.

+0

Нужно ли мне тогда бросать '(SystemMonitoringClass) FieldInfo.GetValue'? – Warz

+0

@Warz: Да, поскольку объявляется 'GetValue' для возврата' object'. –

+0

Я не уверен, что вы делаете здесь с полем var varClass = (SystemMonitoringClass) .GetValue (экземпляр); 'то, что должно быть экземпляром, должно быть – Warz

Смежные вопросы