1

実行時の例外が避けられないのに、なぜコンパイラがこの式をコンパイルできるようにするのですか?

Dynamic Bindingvoidメソッドではうまくいくとは思わない

static void Main(string[] args)
{
    var res = Test((dynamic)"test");  // throws RuntimeBinderException exception at runtime
}

static void Test(dynamic args)
{
}

C#仕様が上記の式を動的にバインドされた式として参照している場合、次のメソッドがコンパイルされないのはなぜですか?

static dynamic DynamicMethod()
{
}
4

1 に答える 1

3

Test((dynamic) "abc")は、全体が動的ステートメントとして評価されます。より完全に、あなたは持つことができます:

public static string Test(string s) { return s; }

これはより良い過負荷になるため、他の方法よりも優先して選択および実行されます。

つまり、メソッドグループを特定のシグニチャに解決しないと、戻り値が無効であるかどうかを知ることはできません。また、過負荷の解決は、定義上、動的呼び出しの実行時まで延期されます。

それはより多くの分析を行うことができますか?おそらく。しかし、仕様はそれを要求していないので、絶対にそれは警告である可能性があります(エラーではありません)。

于 2012-12-12T18:27:53.623 に答える