ダイナミック変数がメソッド呼び出しの引数として使用されている場合、コンパイラが関数の戻り値の型をチェックしない理由を教えてもらえますか?メソッドの引数として動的変数を使用するとコンパイラのチェックが無効になる
class Program
{
static void Main(string[] args)
{
// int a = GetAString(1); // Compiler error CS0029 Cannot impilicitly convert type 'string' to 'int'
dynamic x = 1;
int b = GetAString(x); // No compiler error -> Runtime Binder Exception
// int c = (string)GetAString(x); // Compiler error CS0029 Cannot impilicitly convert type 'string' to 'int'
}
static string GetAString(int uselessInt)
{
return "abc";
}
}
ILSpyのようなツールを使用してプログラムを調べてください。何が起きているのかがわかります。静的な検査はありません。この場合は実行できます。 – Dennis