将默认参数约束为编译时常量的基本原理

时间:2012-12-05 20:28:54

标签: c# default-parameters

我想知道为什么这不会编译:

public static void SomeFunction(Guid someGuid = Guid.NewGuid())
{
        // Do stuff
}

带有消息

  

“'someGuid'的默认参数值必须是编译时常量”

虽然重载版本会编译:

    public static void SomeFunction()
    {
        SomeFunction(Guid.NewGuid());
    }

    public static void SomeFunction(Guid someGuid)
    {
        // Do stuff
    }

换句话说,为什么编译器不会在第二种情况下翻译第一种情况?这个设计选择背后的原因是什么?

1 个答案:

答案 0 :(得分:1)

默认参数值被编译为CIL元数据(如属性),只能保存文字值。

C#编译器在那里做了一些魔术来允许小数。