繁体   English   中英

如何绕过投射到 FieldInfo?

[英]How can I get around casting to the FieldInfo?

我怎样才能绕过投射到 FieldInfo? 使用下面的代码,当派生的 class 具有 ie bool 变量时,它会抛出 InvalidCastException。 问题是它还返回 null 作为字段值。 (一切都发生在最后 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;
    }

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

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

请注意,在这种情况下, child仍然可能是 null,如果后续的 function 没有处理它,您应该检查它。

[编辑]如果您GetValue ObjectParam所有Param ,无论类型Object

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM