C#为什么sizeof(常量)没有定义

时间:2016-07-11 15:22:34

标签: c# const sizeof

对不起,我只是写了一些东西来说明我的观点。

这是一个实际的示例代码:

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?

1 个答案:

答案 0 :(得分:1)

来自MSDN: sizeof (C# Reference)

  

对于所有其他类型,包括结构,sizeof运算符都可以   仅用于不安全的代码块。虽然你可以使用   Marshal.SizeOf方法,此方法返回的值并不总是如此   与sizeof返回的值相同。 Marshal.SizeOf返回   类型被封送后的大小,而sizeof返回   公共语言运行库分配的大小,   包括任何填充。

     

用于获取非托管类型****

的大小(以字节为单位)

很可能没有理由需要获取托管类型的字节大小,这正是您正在做的事情。

"为什么我需要一个固定大小变量的元帅?"

如果你所寻找的只是你当地变量的大小,那么你不一定要这么做。您只需拨打var size = sizeof(int)sizeof(short)即可 它将分别返回4和/或2。