我如何解决投射到FieldInfo的问题?

问题描述 投票:0回答:1

如何解决投射到FieldInfo的问题?使用下面的代码,当派生类具有bool变量时,它将引发InvalidCastException。问题在于它还返回null作为field的值。 (一切都发生在最后5行中,但我为上下文粘贴了更多内容)

    {
        string paramsData = ".";
        if (param == null)
        {
            return paramsData;
        }
        BindingFlags bindingFlags = BindingFlags.Public |
                        BindingFlags.NonPublic |
                        BindingFlags.Instance |
                        BindingFlags.Static;
        FieldInfo[] paramFields = param.GetType().GetFields(bindingFlags);

        foreach (FieldInfo field in paramFields)
        {
            paramsData += field.Name;
            Param child = (Param)field.GetValue(param);
            paramsData += GetParamDataInChildren(child);
        }
        return paramsData;
    }
c# .net json system.reflection
1个回答
0
投票

很难知道您要实现什么,但是看起来您应该在调用GetValue之前检查字段的类型。例如:

if (field.FieldType == typeof(Param))
{
    Param child = (Param)field.GetValue(param);
    paramsData += GetParamDataInChildren(child);
}

请注意,在这种情况下,child仍可以为null,如果后续函数无法处理,则应检查该值。

[编辑]如果您尝试递归获取所有字段,而无论类型如何,都应使递归函数采用Object而不是Param,然后由于Param返回GetValue而无需强制转换为Object ]。

© www.soinside.com 2019 - 2024. All rights reserved.