関数を呼び出してパラメータの1つをdynamicに置き換えると、コンパイラは関数の結果を動的であると推定します。なぜこのようなことが起こるのか分かりません。動的関数パラメータを使用したC#コンパイラ型の推論
public string MethodWithoutOverloads(string a, string b) { ... }
誰かがなぜタイプを知っている...
dynamic b = "";
var a = MethodWithoutOverloads("", b);
a.DoesNotExist();
:
例:のための推論された型が動的であるので、このコードはコンパイルが、もちろんRuntimeBinderExceptionと、実行時に失敗します関数の戻り値の型ではないと推測されますか?
EDIT:コンパイラはメソッドが実行時に呼び出されることになるだろう知っていないので明確な、これが過負荷
これは、1つの方法、つまりあいまいさがない場合に発生します。 String.Formatは良い例ではありませんが、あいまいさがないときに独自のメソッドを呼び出すと型の推論も失敗します。 – Lev
@Levそれは正しいです。*技術的に*コンパイラはあいまいさなくそれを理解することができるかもしれませんが、一見あまり得策ではないが、もっと多くの作業が必要になると思います。 'dynamic'が式の一部であるときはいつでも、結果は' dynamic'でもあります。あなたが型を知っていると確信しているならば、 'var'を使うのではなく変数型を明示的に明示してください。 – Rob
これは基本的に"この場合の型推論を実装しませんでした "... – Lev