1

なぜこれがコンパイルされないのか疑問に思っています:

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
    }

言い換えれば、コンパイラが最初の状況を2番目の状況に変換しないのはなぜですか?このデザインの選択の背後にあるものは何ですか?

4

1 に答える 1

1

デフォルトのパラメーター値は、リテラル値のみを保持できるCILメタデータ(属性など)にコンパイルされます。

C#コンパイラは、小数も許可するためにそこでいくつかの魔法を実行します。

于 2012-12-05T20:30:38.853 に答える