我了解SizeOf()
应该用于与非托管代码进行交互,但我的问题是为什么System.Runtime.InteropServices.Marshal.SizeOf(typeof(System.Char))
会返回1
而不是2
?我假设C# char
应该等同于非托管wchar_t
,其大小为2个字节。这会导致问题吗?
答案 0 :(得分:7)
对于字符类型,大小受应用于该类的
CharSet
值的影响。
根据CharSet Enumeration,默认为CharSet.Ansi
:
虽然公共语言运行时默认值为
Auto
,但语言可能会覆盖此默认值。例如,默认情况下,C#将所有方法和类型标记为Ansi
。
例如:
[StructLayout(LayoutKind.Sequential)]
struct A
{
char c;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
struct B
{
char c;
}
....
Console.WriteLine("{0} {1}", Marshal.SizeOf(typeof(A)), Marshal.SizeOf(typeof(B)));
输出
1 2