![]() |
1
3
对于纯泛型定义,无法强制编译器选择重载。这两种方法无法区分胜利者。 选择一个或另一个似乎是个好主意,但决策需要具有确定性。即使是像文件中第一个这样简单的东西也不真正可行,因为您必须考虑部分类。如果每个方法都在不同的文件中,编译器将如何选择第一个方法? 不过,您可以做的是添加一个接受int的方法的非泛型版本。编译器将选择非泛型版本而不是泛型版本,它将在这个非常有限的场景中产生胜利。不过,对于每种可能有冲突的类型,您都必须重复这一点。 例如。添加此方法可以解决编译错误,但只适用于int。
|
![]() |
2
2
感谢您的回答,他们促使我进入这个解决方案:
|
![]() |
3
1
我知道它有点破坏了泛型的目的,但是如果只定义一次方法,使用两个类型的参数,会怎么样呢?
在方法内部,您可以检查类型并计算出要调用的两个选项之一。
|
![]() |
4
0
这将使用反射来获取方法并任意调用方法。通过对参数和返回类型进行过滤,您可以使这一点更为健壮,因为在获取方法时,这些参数和返回类型都是预期的。
编辑:这里有一个关于你面临的问题的博客,有一个类似于贾里德的解决方案。 http://shiman.wordpress.com/2008/07/07/generic-method-overload-a-trap-for-c-net-library-developers/ 我们真正需要的是在预编译或编译时生成具体签名的模板。 |
![]() |
5
-1
不。 如果您希望编译器任意地决定事情,那么您调用该方法的目的是什么? |
![]() |
A B · C#Excel自动调整列避免长文本时出错 4 月前 |
![]() |
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 5 月前 |
![]() |
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 5 月前 |
|
Sei · Avalonia/WPF将路由器传递到控制模板 5 月前 |