给定以下类...
public abstract class FooBase<TBar> where TBar : BarBase{}
public abstract class BarBase{}
public class Bar1 : BarBase{}
public class Foo1 : FooBase<Bar1> {}...and下面的方法...
public TBar DoSomething<TFoo, TBar>(TFoo theFoo)
where TFoo : FooBase<TBar>
where TBar : BarBase
{
return default(TBar);
}为什么下面这行代码不能隐含返回类型?
Bar1 myBar = DoSomething(new Foo1());相反,我必须像这样指定泛型类型...
Bar1 myBar = DoSomething<Foo1, Bar1>(new Foo1());发布于 2011-07-09 05:33:59
方法类型推断忽略方法类型参数(*)上的泛型约束。方法类型推断的原因仅在于可以通过将实参与形参类型进行比较而做出的推导。由于形参类型中出现的唯一泛型类型参数是TFoo,因此无法推断TBar。
许多人认为这个设计决定是错误的,错误的,错误的。虽然我同意他们的观点,但这个决定确实带来了我认为的一些很好的属性。关于这个问题的长期辩论,请参阅这篇博客文章上的大量评论,告诉我我错了,错了,错了:
(*)请注意,我说过忽略对方法类型参数的约束,而不是一般的约束。如果推导出的形参类型被构造为泛型类型,使得构造违反了它们的类型参数约束,则这一事实会导致类型推断失败,并且该方法不是重载解析的候选方法。但在任何情况下,我们都不会从约束中推断出“嗯,显然这是行不通的”。
https://stackoverflow.com/questions/6630690
复制相似问题