Jay*_*Fix 1 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
}
}
Run Code Online (Sandbox Code Playgroud)
Nol*_*rin 10
您只想Marshal.SizeOf
在System.Runtime.InteropServices
命名空间中使用该方法.
foreach (var fieldInfo in typeof(MyClass).GetFields(BindingFlags.Instance |
BindingFlags.Public | BindingFlags.NonPublic))
{
Console.WriteLine(Marshal.SizeOf(fieldInfo.FieldType));
}
Run Code Online (Sandbox Code Playgroud)
但请注意备注部分中的以下段落:
返回的大小实际上是非托管类型的大小.对象的非托管和托管大小可以不同.对于字符类型,大小受应用于该类的CharSet值的影响.
这些差异可能是无关紧要的,这取决于你的目的......我甚至不确定它是否可能在管理内存中获得确切的大小(或者至少没有很大的困难).