目标:以编程方式确定类字段的大小(以字节为单位)。 例如,请参阅下面的评论......
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/