如何解决投射到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;
}
很难知道您要实现什么,但是看起来您应该在调用GetValue
之前检查字段的类型。例如:
if (field.FieldType == typeof(Param))
{
Param child = (Param)field.GetValue(param);
paramsData += GetParamDataInChildren(child);
}
请注意,在这种情况下,child
仍可以为null,如果后续函数无法处理,则应检查该值。
[编辑]如果您尝试递归获取所有字段,而无论类型如何,都应使递归函数采用Object
而不是Param
,然后由于Param
返回GetValue
而无需强制转换为Object
]。