无法使用fieldinfo访问对象字段

时间:2009-07-21 15:29:57

标签: c# reflection observablecollection

我有一个方法,它接受对象的可观察集合(从web服务返回)并根据它们的属性进行分析。

以下是方法

的代码段

私人双重分析(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始终为null。我可以使用对象名访问对象的每个字段(在foreach中),但是从不填充fieldinfo对象。我甚至尝试使用GetFields方法,但它不返回数组...

P.S:对象字段是公共的。在getfield中使用bindingflags也没有帮助。

4 个答案:

答案 0 :(得分:1)

没有BindingFlags的GetField / GetFields只查找公共字段。我的猜测是“空气”是一个私人领域。

而是试试这个:

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

答案 1 :(得分:1)

我不相信从Web服务返回的对象会公开公共字段。你可能会考虑属性。如果你试试GetProperty("air"),你可能会得到回报。

答案 2 :(得分:0)

现场空气是否私密?如果是这样,你将不得不使用GetField的重载,它接受BindingFlags参数并指定NonPublic

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

答案 3 :(得分:0)

如果该字段不公开,您可能需要使用BindingFlags,因为默认情况下只包含公共字段。

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