我有一个带有 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> {...}
这不会编译,因为它无法解析类型 T
。我也不能将 T
添加为 BisectLeft<T, U>
,因为 T
将被视为类 MyStruct<T>
的类型参数的重复项。
有没有办法在不添加 U
作为类的类型参数的情况下实现这一点?
答案 0 :(得分:2)
您应该在父类型或方法中指定类型参数,如 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 ...;
}
}