0

これは複数のオーバーロードの問題になると想像できますが、(Linq を除いて) コードの大部分にはおそらく 1 つのオーバーロードしかありません。

オーバーロードが 1 つしかない場合、余分なキャスティング ボイラープレートを節約できCannot use a lambda expression as an argument to a dynamically dispatched operation without first casting it to a delegate or expression tree type.、状況のようなエラーを回避できます。

もちろん、後の段階でオーバーロードを追加すると、コードが上記のコンパイラ エラーを再びトリガーし始めると主張することもできます。しかし、繰り返しますが、オーバーロードを追加すると、型指定された動作が壊れる可能性があります (つまり、複数のインターフェイスを使用する場合)。

これは(今のところ)優先事項ではないのでしょうか、それとも概念的な問題がありませんか?言語設計についてもっと学ぶためにこれを求めています。

static int MapLolCats(int amountOfLolcats, Func<dynamic,int> mappingFunction)
{
    return mappingFunction(amountOfLolcats);
}

// This works as expected
var amountOfLegs = MapLolCats(5, x => x * 4);

// This creates a compilation error (despite you could deduct what is meant, because there is only one overload)
// Cannot use a lambda expression as an argument to a dynamically dispatched operation without first casting it to a delegate or expression tree type
dynamic jsonValue = 5;
var amountOfLegs = MapLolCats(jsonValue, x => x * 4);
4

0 に答える 0