类型的sizeof()运算符
本文关键字:运算符 sizeof 类型 | 更新日期: 2023-09-27 18:26:30
我通常会在我的C++代码中这样做:
int variable = 10;
int sizeOfVariable = sizeof(variable); //Returns 4 for 32-bit process
但这似乎对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
除了char
和bool
(Marshal.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;
所有其他基本类型(byte
、sbyte
、short
、ushort
、int
、uint
、long
、ulong
、float
、double
、decimal
、bool
、char
)都有固定的长度,所以你可以做sizeof(int)
,它将始终是4。
您可以使用Marshal.SizeOf()
方法,也可以在非托管代码中使用sizeof
:
Console.WriteLine(Marshal.SizeOf(typeof(int)));
这将在表意文字上打印4
。
以下是Eric Lippert的博客链接,描述了两种尺寸选项之间的差异。
您可以在不安全的上下文中对用户定义的结构使用sizeof
,但与Marshal.SizeOf不同。它不支持装箱对象