|
|
1
2
基于什么? 您看到的行为已记录在案,并符合C规范。正如您可能想象的那样,类型推断规范相当复杂。我不会在这里引用全部内容,但如果你感兴趣的话,你可以自己复习。相关章节为 .
根据你写的评论,我认为至少部分困惑源于你忘记了有
此方法的参数,而不是两个(这会影响推理的进行方式)。此外,您似乎需要第二个参数
但我认为主要的是,您期望类型推断在类型差异方面比规范实际需要的更激进。 7.5.2.1第一阶段
需要推断两个类型参数,
在第二阶段,尝试修复这些类型。
因此,你最终会
当然,编译器使用它是合法的(如果不符合规范)
这会更改用于调用的表达式的类型,从而更改所使用的边界,最后当然还会更改在推理过程中选择的实际类型。但是在最初的调用中,编译器在推理过程中不需要使用与您指定的类型不同的类型,即使它本来是允许的,但事实并非如此。 使生效 |
|
|
2
0
我敢肯定这是意料之中的行为。 我们感兴趣的方法签名是:
如果我们再看最后一个参数
在这一点上,编译器为什么还要寻找更多的东西呢?自然和明显的选择,没有铸造需要的作品,所以它使用。如果你不喜欢它,你总是可以选择做你做的,并明确指出通用参数。
当然你也可以把比较器做成
|
|
|
A B · C#Excel自动调整列避免长文本时出错 1 年前 |
|
|
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 1 年前 |
|
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 1 年前 |
|
|
Sei · Avalonia/WPF将路由器传递到控制模板 1 年前 |