类型的sizeof()运算符

本文关键字:运算符 sizeof 类型 | 更新日期: 2023-09-27 18:26:30

我通常会在我的C++代码中这样做:

int variable = 10;
int sizeOfVariable = sizeof(variable);   //Returns 4 for 32-bit process

但这似乎对C#不起作用。有模拟信号吗?

类型的sizeof()运算符

C#中的sizeof运算符仅适用于编译时已知的类型,而不适用于变量(实例)。

正确的例子是

int variable = 10;
int sizeOfVariable = sizeof(int);

因此,您可能正在寻找Marshal.SizeOf,它可以用于任何对象实例或运行时类型。

int variable = 10;
int sizeOfVariable = Marshal.SizeOf(variable);    

请参阅此处了解更多信息

.NET 4.0以后版本:

if (Environment.Is64BitProcess)
    Console.WriteLine("64-bit process");
else
    Console.WriteLine("32-bit process");

.NET框架的旧版本:

public static bool Is64BitProcess
{
    get { return IntPtr.Size == 8; }
}

根据您的示例,我假设您想这样做来确定流程的比特性,事实上这可能不是您想要做的!)

只有几种标准情况下你会想要这样做:

int x = sizeof(T) // where T is a generic type

遗憾的是,它不起作用:-)

int x = Marshal.SizeOf(T) // where T is a generic type

除了charboolMarshal.SizeOf(typeof(char))==1而不是2,Marshal.SizeOf(typeof(bool))==4而不是1)

int x = sizeof(IntPtr);

它不起作用,但你可以作为来做

int x = Marshal.SizeOf(typeof(IntPtr));

或者,更好的

int x = IntPtr.Size;

所有其他基本类型(bytesbyteshortushortintuintlongulongfloatdoubledecimalboolchar)都有固定的长度,所以你可以做sizeof(int),它将始终是4。

您可以使用Marshal.SizeOf()方法,也可以在非托管代码中使用sizeof

Console.WriteLine(Marshal.SizeOf(typeof(int)));

这将在表意文字上打印4

以下是Eric Lippert的博客链接,描述了两种尺寸选项之间的差异。

您可以在不安全的上下文中对用户定义的结构使用sizeof,但与Marshal.SizeOf不同。它不支持装箱对象