代码之家  ›  专栏  ›  技术社区  ›  ron

无法使用fieldinfo访问对象字段

  •  0
  • ron  · 技术社区  · 17 年前

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

    这是该方法的代码片段

            FieldInfo fi = null;
    
            foreach (MyApp.MyObj oi in mobjColl)
            {
    
            if(oi.pressure.Equals("high"){
    
                fi = oi.GetType().GetField("air");
    
                .....
            }
            }
            return someval;
        }
    

    4 回复  |  直到 17 年前
        1
  •  1
  •   Tinister    17 年前

    我不认为从web服务返回的对象公开了公共字段。你可能会想到房产。如果你尝试 GetProperty("air") 你可能会得到一些回报。

        2
  •  1
  •   Tinister    17 年前

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

    请尝试以下操作:

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

        3
  •  0
  •   JaredPar    17 年前

    机场是私人的吗?如果是这样,则必须使用GetField的重载,该重载接受BindingFlags参数并指定NonPublic

    fi = oi.GetType().GetField("air", BindingFlags.NonPublic | BindingFlags.Instance);
    
        4
  •  0
  •   g .    17 年前

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

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