c# - .NET 反射 : determine sizes of a class' fields

标签 c# reflection field sizeof

目标:以编程方式确定类字段的大小(以字节为单位)。 例如,请参阅下面的评论......

class MyClass
    {
    public  byte    b ;
    public  short   s ;
    public  int i ;
    }

class MainClass
    {
    public static void Main()
        {
        foreach ( FieldInfo fieldInfo
            in typeof(MyClass).GetFields(BindingFlags.Instance
             | BindingFlags.Public | BindingFlags.NonPublic) )
            Console.WriteLine ( fieldInfo.FieldType ) ;

        // output is:
        //    System.Byte
        //    System.Int16
        //    System.Int32

        // desired: to include "sizeof" each type (in bytes) ...
        //    System.Byte     1
        //    System.Int16    2
        //    System.Int32    4
        }
    }

最佳答案

您只想使用 Marshal.SizeOf System.Runtime.InteropServices 命名空间中的方法。

foreach (var fieldInfo in typeof(MyClass).GetFields(BindingFlags.Instance |
    BindingFlags.Public | BindingFlags.NonPublic))
{
    Console.WriteLine(Marshal.SizeOf(fieldInfo.FieldType));
}

但是请注意备注部分中的以下段落:

The size returned is the actually the size of the unmanaged type. The unmanaged and managed sizes of an object can differ. For character types, the size is affected by the CharSet value applied to that class.

不过,这些差异可能无关紧要,具体取决于您的目的……我什至不确定是否有可能在托管内存中获得确切的大小(或者至少不是没有很大的困难)。

关于c# - .NET 反射 : determine sizes of a class' fields,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1121628/

相关文章:

Java:值在不应该更新的时候更新

c# - 从C#调用VB.Net函数

c# - 在 C# 中使用 DirSync 不仅返回更改的值

c# - 在服务实体中创建新记录

java - 调用类构造函数和使用 Class.forName().newInstance 的区别

c# - 检索泛型方法正确重载的 MethodInfo

jQuery 抓取动态文本区域的值

c# - 使用 Automapper 从嵌套多层的列表中映射/转换为父属性

java - 将 Java 类型与类进行比较

php - 计算字段值在表中出现的次数