2011-07-15 9 views
0

への一つの方法からジェネリック型を推論私はこれを行う方法を探しています別の

instanceOfMyClass.AMethod<AType>(x => x.AnotherMethod<AType>(y => y.PropertyOfATypeClass)); 

ATypeを書き換えなくてもこれを行う方法はありますか?

AnotherMethodシグネチャは、今では、次のとおりです

その

<T> 

"がAnotherMethodが" に定義されて

"AMethod" から同じATYPEあろう

AnotherMethod<T>(Expression<Func<T, object>>) 

"AMethod"と同じクラス。

私はAMethodの署名が必要です。

+3

「MyClass.AMethod」、「MyOtherClass.AnotherMethod」、「MyOtherOtherClass.PropertyofATypeClass」のシグネチャを指定してください(ここでは、「MyOtherClass」と「MyOtherOtherClass」の名前の種類は実際にはわかりませんあなたのラムダ式の 'x'と' y'の型を教えてください)。 – jason

+0

AMethod ()が引数として取る代理人の定義は何ですか? –

+1

一般的な型推論は、パラメータに基づいています。わかりやすい例が必要です。 –

答えて

0

C#型推論エンジンの制限の1つが発生したようです。

一般的な場合、メソッドグループ型推論の一般的なケースでは、ジェネリックデリゲートを受け取るメソッドのパラメータの型推論を行うために、コンパイラはメソッドシグニチャを知る必要がありますオーバーロードがあるデリゲートのタイプ)。メソッドシグネチャを決定するには、デリゲートパラメータの型を知る必要があります。したがって、コンパイラが周期的なプロセスに入る可能性があります。これを避けるために、コンパイラは推論を行おうとしません。はるかに正確、詳細な、とよく書かれた説明、see this blog post.

そして、私は短い答えはノー、ジェネリック型を再指定しないようにする方法はありません、だと思うのために

+0

その一部は彼のコードの構造にもよりますが。明らかに彼は彼のために働いていないが、推論エンジンが彼のために働くことを可能にするために彼がコードを別々に再構成できるかどうか疑問に思う(彼のコードを最初に見る必要がある...) –

+0

C#4でこのアルゴリズム。私は明確にするために、そのブログの投稿を更新する必要があります。つまり、このケースでは、型推論によって問題を解決できないことに同意します。 –

関連する問題