更新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;
}
有什么方法可以使用泛型来确保
source
和comparer
是同一类型,同时仍然保持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/