c# - 进一步约束类类型参数的通用方法
问题描述
我有一个带有BisectLeft
方法的数据结构
public class MyStruct<T> where T: IComparable<T>
{
public T BisectLeft(T item) {...}
}
我想BisectLeft
为泛型类型添加一个重载,U
其中T: IComparable<U>
public T BisectLeft(T item) {...}
public T BisectLeft<U>(U item) where T: IComparable<U> {...}
这不会编译,因为它无法解析 type T
。我也不能添加T
asBisectLeft<T, U>
因为T
会被认为是类的类型参数的副本MyStruct<T>
。
U
有没有办法在不添加类的类型参数的情况下实现这一点?
解决方案
您应该where T
在父类型或方法中指定类型参数。如果您在两个地方都定义它,它将不起作用。
在您的情况下,您应该只在方法上执行此操作,例如:
public class MyStruct
{
public T BisectLeft<T>(T item)
where T : IComparable<T>
{
return ...;
}
public T BisectLeft<T, U>(U item)
where T : IComparable<U>
{
return ...;
}
}
推荐阅读
- python - 如何将从txt文件中选择的文件复制到另一个文件夹python
- html - 如何在 Selenium 中执行 webelement 的 js
- android - 当底部工作表中的 EditText 时隐藏软键盘不起作用
- bootstrap-4 - 如何在其中制作 2 行
- python - 匹配包含除 url 之外的任何内容的字符串?
- python-3.x - 为什么 mongodb 将我的日期格式更改为长数字,我该如何解决?
- python - django 不保存 imagekit 中的缩略图
- python - JSON解析错误-当我尝试使用Angular + REST上传Excel工作表时,'utf-8'编解码器无法解码位置XXX中的字节0xc9
- php - 如何使用 pluck 从 Laravel 中的其他表中获取特定数据?
- php - 如何在 php 的 url 中删除包含查询参数的 (.php) 扩展名?