C# 是否可以将泛型约束与运算符重载相结合?

C# 是否可以将泛型约束与运算符重载相结合?,c#,generics,operator-overloading,generic-constraints,C#,Generics,Operator Overloading,Generic Constraints,我想知道是否有通用约束(何时)可以允许此代码 这样做的正确模式是什么 public MyClass<T> { public void MyMethod(T a, T b) { //some code var result = a<b; //some code } } 公共MyClass { 公共无效方法(T a,T b) { //一些代码 var result=a这实际上与模式匹配无关。其中(而非时)在本例中

我想知道是否有通用约束(何时)可以允许此代码

这样做的正确模式是什么

public MyClass<T>
{
    public void MyMethod(T a, T b) 
    {
       //some code
       var result = a<b;
      //some code 
    }
}
公共MyClass
{
公共无效方法(T a,T b)
{
//一些代码

var result=a这实际上与模式匹配无关。
其中
(而非
)在本例中表示。 不,不可能对操作符有约束

您可能希望改为使用自定义接口,在其上添加约束

public class MyClass<T> where T: ICustomInterface
公共类MyClass其中T:ICustomInterface
运算符的一个很好的候选者,但它不适合您希望运算符重载的范围


顺便说一句,F#允许您使用有这样一个约束-它被称为。它允许您在任何类型成员或运算符上添加约束。但这不是CLR功能,因为丰富的类型推断系统才有可能。这实际上与模式匹配无关。
where
(而不是
when
)在这种情况下意味着。 不,不可能对操作符有约束

您可能希望改为使用自定义接口,在其上添加约束

public class MyClass<T> where T: ICustomInterface
公共类MyClass其中T:ICustomInterface
运算符的一个很好的候选者,但它不适合您希望运算符重载的范围


顺便说一句,F#允许您通过使用来拥有这样一个约束-它被称为。它允许您在任何类型成员或运算符上添加约束。但这不是CLR功能,因为丰富的类型推断系统才有可能实现。

此时(2018年5月),您唯一能做的就是在类定义中添加一个约束到
IComparable
,并在此时(2018年5月)使用
CompareTo
方法而不是
,你唯一能做的就是在类定义中添加一个约束到
IComparable
,并使用
CompareTo
方法而不是
你是在说建议的C#8.0递归模式匹配还是什么?我对C#和递归模式匹配一无所知,我使用的是C#7.2。但是我没有指定C#在我的版本中,我不在乎它。@xanatos,我想问题是我们是否可以将
t
强制转换为某个具有
@TetyanaKorogoda的“类型”,我只想在方法中指定t具有:I comparable
,并使用
CompareTo
方法而不是
你是在说建议的C#8.0递归模式匹配还是什么?我对C#和递归模式匹配一无所知,我使用的是C#7.2。但是我没有指定C#版本在我的版本中,因为,我真的不在乎这一点。@xanatos,我想问题是我们是否可以将
t
强制转换为具有
@TetyanaKorogoda的某个“类型”,我只想在方法中指定t具有CompareTo
方法而不是
ok我将通用约束与模式匹配my bad混合了ok我将通用约束与模式匹配my bad混合了
public class MyClass<T> where T : IComparable<T>
{
    public void MyMethod(T a, T b) 
    {
       //some code
       var result = a.CompareTo(b) < 0; // a < b
       //some code 
    }
}