|
|
1
3
编辑 好吧…我想我现在看到你的困惑了。您会期望DoStuff(string)将参数保持为字符串,并首先遍历基类方法列表以寻找合适的签名,如果失败,则尝试将参数转换为其他类型。
但事情恰恰相反。..相反
嗯……我相信Jon或Marc在这一点上能够插话,具体介绍一下C#规范中涵盖这一特殊情况的段落 原创 这两种方法都需要一个IEnumerable集合
编译错 那么,解决方案是什么,这完全取决于你想要实现什么。..以下两种情况都是有效的,本质上,你的类型用法在你的化身中是不正确的。
|
|
|
2
3
正如Eric Lippert解释的那样,编译器选择
通过将DoStuff实现为
extension method
.
检查扩展方法
之后
基类方法,因此它不会尝试匹配
以下代码演示了所需的方法解析顺序、协方差和继承。请将其复制/粘贴到新项目中。
缺点
我能想到的是,到目前为止,你不能使用
输出如下:
你能看出这项工作有什么问题吗? |
|
|
3
2
我的猜测是,它首先在派生类中查找以解析方法调用(因为你的对象是派生类型的对象)。如果,并且只有当它不能,它才会继续查看基类方法来解决它。在你的情况下,因为它可以使用
|
|
4
2
编译器将尝试将参数与IEnumerable匹配
之后,编译器检查另一个条件“where OtherT:T”,但该条件不满足。因此出现了编译器错误。 |
|
|
5
1
我认为这与char是一种值类型而string是一种引用类型的事实有关。看起来你在定义
char不是从string派生出来的。 |
|
|
6
0
我不太清楚你想实现什么,是什么阻止了你只使用两种方法,
|
|
|
A B · C#Excel自动调整列避免长文本时出错 9 月前 |
|
|
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 10 月前 |
|
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 10 月前 |
|
|
Duck0 · 这个对象在更高的帧率下会更快吗,因为它在Update()中? 10 月前 |
|
|
Sei · Avalonia/WPF将路由器传递到控制模板 10 月前 |