问题
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?
回答1:
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.
来源:https://stackoverflow.com/questions/13731814/rationale-behind-constraining-default-parameters-as-compile-time-constants