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
}
}