2

更新 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
4

2 回答 2

3

好吧,你可以使用:

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>

后者在避免拳击方面也会更有效。

于 2012-09-20T13:38:49.717 回答
0

这是完整的代码

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

}

class Program
{
    static void Main(string[] args)
    {
        int test = 2;
        var resultOne = test.IsLessThan(3); // returns true
        var resultTwo = test.IsLessThan("Hello world"); // doesn't compile
    }        
}

我知道我迟到了,但这是一个独立的解决方案(而且很难与 Jon 竞争,叹息......)

于 2012-09-20T13:47:24.007 回答