将泛型类型从一种方法推断到另一种方法

时间:2011-07-15 18:10:01

标签: c# .net generics types

我正在寻找一种方法:

var instanceOfMyClass = new MyClass();

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

我可以这样做,但我需要明确指定另一个类的类型,如:

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

有没有办法在不需要重写AType的情况下执行此操作?

到目前为止,AnotherMethod签名是:

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

那里

<T> 

与“AMethod”相同的AType

“AnotherMethod”与“AMethod”在同一类中定义。

我需要AMethod的签名。

1 个答案:

答案 0 :(得分:0)

您似乎遇到了C#类型推理引擎的一个限制。

问题的关键在于,在方法组类型推断的一般情况下,为了对采用泛型委托的方法的参数进行类型推断,编译器需要知道方法签名(以确定哪些类型)代表们有重载);但要确定方法签名,需要知道委托参数的类型。因此,它可能使编译器进入循环过程。为避免这种情况,编译器甚至不会尝试进行推理。

要获得更准确,详尽,写得更好的解释,see this blog post.

我认为简短的回答是,不,没有办法避免重新指定泛型类型。