- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
给定以下类(class)...
public abstract class FooBase<TBar> where TBar : BarBase{}
public abstract class BarBase{}
public class Bar1 : BarBase{}
public class Foo1 : FooBase<Bar1> {}
...和下面的方法...
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());
最佳答案
方法类型推断忽略了对方法类型参数 (*) 的泛型约束。方法类型推断仅针对可通过将参数 与形式参数类型 进行比较而得出的推论进行推理。由于形式参数类型中出现的唯一泛型类型参数是 TFoo,因此无法推导出 TBar。
许多人认为这个设计决策是错误的,错误的,错误的。虽然我同意他们的观点,但这个决定确实导致了我认为一些不错的属性。有关此问题的扩展辩论,请参阅这篇博客文章中的无数评论,告诉我我错了,错了,错了:
(*) 请注意,我说的是忽略方法类型参数 的约束,而不是一般的约束。如果推导的形式参数类型是构造的泛型类型,使得构造违反了它们的 类型参数约束,那么这个事实会导致类型推断失败,并且该方法不是重载决策的候选者。但在任何情况下,除了“嗯,显然这行不通”之外,我们都不会从约束中进行推论。
关于c# - 为什么不能推断出嵌套的泛型类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37736049/
基础问题 我要解决的基本问题是: 我有一个模板参数包 ArgTypes,我需要用包装在 std::optional 中的每个类型创建一个元组。例如:make_optional_tuple应该返回 st
我使用 createEntityAdapter 设置了一个简单的 redux store。初始状态包含实体、ID、状态、错误设置等 const carouselEventAdapter = creat
我有一些(遗留)代码,如下所示: void castFoo(string type, void* foo) { FooA* foo_a = NULL; FooB* foo_b = NULL;
我的代码是 const int *const ptrA = nullptr; auto *ptrB = &ptrA; 我对 const int *const ptrA 的看法是: (*
我目前正在尝试用 C++ 实现 XOR 链表。我尝试使用模板使其通用。编译时会弹出此错误,我无法解决这个问题。 我尝试使用模板在谷歌上搜索 XOR 链表,但到目前为止似乎还没有实现它。 异或链表.h:
我正在尝试找到一种方法来调用多个类成员函数,每个函数都有不同的参数,并且在调用前后会发生某些已知功能。 这个包装函数是我试过的,但是例如对它的最终调用不会编译错误: 'bool Wrapper(Wor
此代码在 上编译成功g++ ( Coliru ) ,但不是 Visual C++ ( rextester ) - 在线和我的桌面。 它是一个更大的 Visual Studio 2015 项目的简化版本
我正在尝试编写一个通用类,它传递一个键 key 对应于一组已知接口(interface)中的一个的键,稍后可以传递一个对象 thing 并类型安全地访问 thing[key]。这是我得到的: inte
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
我是一名优秀的程序员,十分优秀!