これは複数のオーバーロードの問題になると想像できますが、(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);