更新1

我意识到,最初对简单泛型类型的限制意味着我无法比较不同类型的对象,无论它们是否实现了IComparable<T>,结果现在是最新的:

public static bool IsLessThan<TSource, TComparer>(this TSource source, TComparer comparer)
    where TSource : IComparable<TComparer>
    where TComparer : IComparable<TComparer>
{
    return source.CompareTo(comparer) < 0;
}


原版的

我在IsLessThan(IComparable comparer)界面上编写了一个简单的IComparable扩展方法。但是,我遇到了一个小问题;我已经意识到,从本质上讲,它允许比较任何IComparable,而我不希望这样做。另外,我想知道是否可以使用泛型类型限制参数?目前,我的扩展方法如下:

public static bool IsLessThan(this IComparable source, IComparable comparer)
{
    return source.CompareTo(comparer) < 0;
}


有什么方法可以使用泛型来确保sourcecomparer是同一类型,同时仍然保持IComparable的约束?



int test = 2;
var resultOne = test.IsLessThan(3); // should return true
var resultTwo = test.IsLessThan("Hello world"); // shouldn't compile

最佳答案

好吧,您可以使用:

public static bool IsLessThan<T>(this T source, T comparer) where T : IComparable


或者,您可以使用IComparable<T>使它受到更多限制:

public static bool IsLessThan<T>(this T source, T comparer)
    where T : IComparable<T>


就避免拳击而言,后者也将更加有效。

关于c# - 接口(interface)扩展方法,具有匹配的通用参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12513833/

10-11 02:19