|
|
1
9
是的,在这种情况下是这样的。尝试推断方法的泛型类型参数时(
来自 C# 5 specification (我最近发现的),§7.5.2:
编译器的第一步如下(§7.5.2.1):
你只有一个论点,所以我们只有
现在,我们需要
下界推理
从
我们可以跳过前两种情况,因为它们显然不适用,第三种情况是我们所陷入的情况。编译器试图查找
独特的
类型
由于唯一性约束,没有为此方法参数进行推理。由于编译器无法从参数中推断出任何类型信息,因此它没有继续尝试推断的内容。
至于为什么存在唯一性约束,我猜想它简化了算法,从而简化了编译器的实现。如果你感兴趣, here's a link 到Roslyn(现代C编译器)实现泛型方法类型推断的源代码。 |
|
|
2
13
似乎类型推断以贪婪的方式工作,首先尝试匹配 方法 泛型类型,然后是类泛型类型。所以如果你说
这很奇怪,因为foo是类泛型类型的唯一候选。 首先,如果将方法泛型类型替换为第二类泛型类型,它将工作:
其次(这是一个奇怪的部分,它突出了类型推断的工作原理),如果您替换
首先,您会得到相同的错误,但请注意如果强制使用字符串会发生什么:
这意味着编译器首先查看
方法
泛型类型(
我试图从Microsoft中找到一个类型推断规范,但找不到任何。 |
|
|
3
5
在C中,您可以通过使用
您可以这样实现访问者:
通过这样做,您将不需要在上实现accept方法
|
|
|
Rational Redneck · Java结构化方法链接 4 年前 |
|
|
KianQ · 如何从数组生成SQL Update语句 4 年前 |
|
|
AJA SMBAT · 我在获取列表而不是绑定方法时遇到问题 4 年前 |
|
|
dsdsds sdsds · .pop()从原始列表中删除元素[重复] 4 年前 |
|
|
MatÄj VondráÄek · 如何在c#方法中传递类型? 4 年前 |
|
|
AISAN · 找不到令人兴奋的符号?[重复] 4 年前 |