Marshal.SizeOf(Type t)函数

时间:2014-09-27 02:49:53

标签: c# .net

我了解SizeOf()应该用于与非托管代码进行交互,但我的问题是为什么System.Runtime.InteropServices.Marshal.SizeOf(typeof(System.Char))会返回1而不是2?我假设C# char应该等同于非托管wchar_t,其大小为2个字节。这会导致问题吗?

1 个答案:

答案 0 :(得分:7)

来自Marshal.SizeOf

  

对于字符类型,大小受应用于该类的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