0

我有一个方法可以接收对象的可观察集合(从 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 始终为空。我可以使用对象名称访问对象的每个字段(在 foreach 中),但是永远不会填充 fieldinfo 对象。我什至尝试使用 GetFields 方法,但它不返回数组......

PS:对象字段是公开的。在 getfield 中使用 bindingflags 也没有帮助。

4

4 回答 4

1

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

而是试试这个:

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

于 2009-07-21T15:32:35.783 回答
1

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

于 2009-07-21T16:01:53.150 回答
0

野外空气是私人的吗?如果是这样,您将不得不使用 GetField 的重载,它接受 BindingFlags 参数并指定 NonPublic

fi = oi.GetType().GetField("air", BindingFlags.NonPublic | BindingFlags.Instance);
于 2009-07-21T15:33:51.663 回答
0

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

fi = oi.GetType().GetField("air", BindingFlags.Instance | BindingFlags.NonPublic);
于 2009-07-21T15:33:55.860 回答