繁体   English   中英

进一步约束 class 类型参数的通用方法

[英]Generic method that further constrains the class type parameter

我有一个带有BisectLeft方法的数据结构

public class MyStruct<T> where T: IComparable<T>
{
    public T BisectLeft(T item) {...}
}

我想为泛型类型U添加BisectLeft的重载,其中T: IComparable<U>

    public T BisectLeft(T item) {...}

    public T BisectLeft<U>(U item) where T: IComparable<U> {...}

这不会编译,因为它无法解析类型T 我也不能将T添加为BisectLeft<T, U>因为T将被视为 class MyStruct<T>的类型参数的副本。

有没有办法在不添加U作为 class 的类型参数的情况下实现这一点?

您应该在父类型或方法中指定类型参数,例如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 ...;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM