我正在寻找一种方法:
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的签名。
答案 0 :(得分:0)
您似乎遇到了C#类型推理引擎的一个限制。
问题的关键在于,在方法组类型推断的一般情况下,为了对采用泛型委托的方法的参数进行类型推断,编译器需要知道方法签名(以确定哪些类型)代表们有重载);但要确定方法签名,需要知道委托参数的类型。因此,它可能使编译器进入循环过程。为避免这种情况,编译器甚至不会尝试进行推理。
要获得更准确,详尽,写得更好的解释,see this blog post.
我认为简短的回答是,不,没有办法避免重新指定泛型类型。