SizeOf数组作为字段?

时间:2017-02-17 16:12:53

标签: c#

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));

}

1 个答案:

答案 0 :(得分:0)

我怀疑它与你的字段是数组类型的事实有关 - 我无法从文档中确认这一点。

通过检查field.FieldType.IsArray然后手动计算大小,您可能对数组类型敏感。然而,这不是直截了当的,因为数组可以是多维的,或者是锯齿状的(这意味着分析将是递归的)。

另一种选择是远离试图发现数组类型的大小。

在相关的说明中,您是否在泛型类型的字段上尝试了代码?