【问题标题】:Cannot access Object fields using fieldinfo无法使用 fieldinfo 访问对象字段
【发布时间】:2010-11-12 16:43:09
【问题描述】:

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

这是方法中的代码 sn-p

私人双重分析(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 中使用 bindingflags 也没有帮助。

【问题讨论】:

    标签: c# reflection observablecollection


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      试试这个:

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

      【讨论】:

      • 嗨,我忘了说......这些字段是公开的......我尝试使用绑定标志,但也没有用......thanx
      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-03-26
          • 1970-01-01
          • 1970-01-01
          • 2016-01-08
          • 2013-08-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多