Невозможно получить доступ к полям объекта, используя fieldinfo - PullRequest
0 голосов
/ 21 июля 2009

У меня есть метод, который берет наблюдаемую коллекцию (возвращенную из веб-службы) объектов и анализирует их в соответствии с их атрибутами.

Вот фрагмент кода из метода

закрытый двойной анализ (ObservableCollection mobjColl) {

        FieldInfo fi = null;

        foreach (MyApp.MyObj oi in mobjColl)
        {

        if(oi.pressure.Equals("high"){

            fi = oi.GetType().GetField("air");

            .....
        }
        }
        return someval;
    }

Моя проблема в том, что fieldinfo fi всегда равно нулю. Я могу получить доступ к каждому полю объекта (в пределах foreach), используя имя объекта, однако объект fieldinfo никогда не заполняется. Я даже пытался использовать метод GetFields, но он не возвращает массив ...

P.S: поля объекта являются открытыми. Использование обязательных флагов в getfield также не помогло.

Ответы [ 4 ]

1 голос
/ 21 июля 2009

Я не верю, что объекты, возвращаемые веб-сервисами, открывают открытые поляВы могли бы думать о свойствах вместо этого.Если вы попробуете GetProperty("air"), вы, вероятно, получите что-то обратно.

1 голос
/ 21 июля 2009

GetField / GetFields без BindingFlags ищет только открытые поля. Я предполагаю, что "воздух" является частным полем.

Вместо этого попробуйте это:

oi.GetType().GetField("air", BindingFlags.Instance | BindingFlags.NonPublic);

0 голосов
/ 21 июля 2009

Если поле не является открытым, вам может понадобиться использовать BindingFlags, так как по умолчанию включены только открытые поля.

fi = oi.GetType().GetField("air", BindingFlags.Instance | BindingFlags.NonPublic);
0 голосов
/ 21 июля 2009

Полевой воздух частный? В этом случае вам придется использовать перегрузку GetField, которая принимает параметр BindingFlags и указывать NonPublic

fi = oi.GetType().GetField("air", BindingFlags.NonPublic | BindingFlags.Instance);
...