class foo {
int foo1;
bar[] bars = new bar[64];
}
class bar {
int bar1;
int bar2;
}
我试图读取类foo
中的所有内容(以前是结构,但不能在结构中实例化数组大小)。但这给了我一个错误,说它无法计算bar[]
的大小,为什么会这样,我怎么能这样做呢?
foo bla = new foo();
foreach (var field in
typeof(foo).GetFields(BindingFlags.Instance |
BindingFlags.NonPublic |
BindingFlags.Public)) {
Console.WriteLine("({0}) {1} = {2} (size: {3})", field.FieldType, field.Name, field.GetValue(bla), Marshal.SizeOf(field.FieldType));
}
答案 0 :(得分:0)
我怀疑它与你的字段是数组类型的事实有关 - 我无法从文档中确认这一点。
通过检查field.FieldType.IsArray
然后手动计算大小,您可能对数组类型敏感。然而,这不是直截了当的,因为数组可以是多维的,或者是锯齿状的(这意味着分析将是递归的)。
另一种选择是远离试图发现数组类型的大小。
在相关的说明中,您是否在泛型类型的字段上尝试了代码?