.NET のジェネリック メソッドで戻り値の型を推論できない理由
.NET では、ジェネリック メソッドを使用して、推論できるコードを作成できます。さまざまなタイプで動作します。ただし、言語特有の制限により、ジェネリック メソッドの戻り値の型は推論できません。
理由
この制限の基礎となる重要な原則は、「内部- 「to-outside」型情報の流れ。式を評価するとき、型情報は内部には伝播されず、外部にのみ伝播されます。これにより、コンパイラはパラメーターと引数の型を決定できますが、ジェネリック メソッドの戻り値は決定できません。
デモ
次のジェネリック メソッドを考えてみましょう:
static TDest Gimme<TSource, TDest>(TSource source) { return default(TDest); }
整数の引数を指定してこのメソッドを呼び出し、文字列の戻り値を期待すると、コンパイラはerror:
string dest = Gimme(5); // Error: The return type cannot be inferred
これは、コンパイラが引数のみに基づいて Gimme の戻り値の型を決定できないためです。 TDest の型を推論する前に、まず戻り値の型を知る必要があります。
影響と複雑さ
型情報が双方向に流れる可能性がある場合、シナリオが発生します。そこでコンパイラは乗り越えられない課題に直面することになります。次の例を考えてみましょう:
結論
.NET のジェネリック メソッドの戻り値の型の推論に関する制限は任意ではありません。これは、コンパイラーが複雑な型推論シナリオによって圧倒されるのを防ぎ、言語の堅牢性を保証する重要な保護手段です。
以上が.NET がジェネリック メソッドの戻り値の型を推測できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。