Frage

I am wondering why this would not compile:

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

with the message

"Default parameter value for 'someGuid' must be a compile-time constant"

while the overloaded version would compile:

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

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

In other words, why doesn't the compiler translate the first situation in the second? What lies behind this design choice?

War es hilfreich?

Lösung

Default parameter values are compiled to CIL metadata (like attributes) which can only hold literal values.

The C# compiler does some magic there to allow decimals as well.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top