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

本文关键字:constant sizeof 定义 为什么 | 更新日期: 2023-09-27 17:56:16

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

下面是一个实际的示例代码:

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);
        }
    }
}

如果我有一个常量,为什么我会收到错误:严重性代码说明项目文件行抑制状态错误 CS0233 'a' 没有预定义的大小,因此 sizeof 只能在不安全的上下文中使用(考虑使用 System.Runtime.InteropServices.Marshal.SizeOf)

为什么固定大小变量需要元帅?

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

来自 MSDN: sizeof (C# 参考)

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

用于获取非托管类型的大小(以字节为单位)****

很有可能,实际上没有理由需要获取托管类型的字节大小,这就是您正在执行的操作。

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

如果您正在寻找的只是局部变量的大小,则不一定必须这样做。您可以简单地拨打var size = sizeof(int)sizeof(short)将分别返回 4 和/或 2。