对不起,我只是写了一些东西来说明我的观点。
这是一个实际的示例代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CacheScratch
{
class Class1
{
public const int a = 0xABAC;
int test()
{
return sizeof(a);
}
}
}
如果我有一个const,为什么我会收到错误: 严重性代码描述项目文件行抑制状态 错误CS0233' a'没有预定义的大小,因此sizeof只能在不安全的上下文中使用(考虑使用System.Runtime.InteropServices.Marshal.SizeOf)
为什么我需要一个固定大小变量的Marshal?
答案 0 :(得分:1)
对于所有其他类型,包括结构,sizeof运算符都可以 仅用于不安全的代码块。虽然你可以使用 Marshal.SizeOf方法,此方法返回的值并不总是如此 与sizeof返回的值相同。 Marshal.SizeOf返回 类型被封送后的大小,而sizeof返回 公共语言运行库分配的大小, 包括任何填充。
用于获取非托管类型****
的大小(以字节为单位)
很可能没有理由需要获取托管类型的字节大小,这正是您正在做的事情。
"为什么我需要一个固定大小变量的元帅?"
如果你所寻找的只是你当地变量的大小,那么你不一定要这么做。您只需拨打var size = sizeof(int)
或sizeof(short)
即可
它将分别返回4和/或2。