我可以使用+运算符的通用约束吗?

是否有一些“where”类型的约束可以添加以使下面的代码编译?

public class Plus : BinaryOperator where T : ... { public override T Evaluate(IContext context) { return left.Evaluate(context) + right.Evaluate(context); } } 

谢谢 :)

C#中没有这样的设备。 但是有一些选择:

  • 在C#4.0和.NET 4.0(或更高版本)中,使用dynamic ,它支持+但不提供编译时检查
  • 在.NET 3.5(或更高版本)中, MiscUtil提供了一个Operator类,它使运算符可用作方法 – 再次,没有任何编译时检查

所以要么:

 return (dynamic)left.Evaluate(context) + (dynamic)right.Evaluate(context); 

要么

 return Operator.Add(left.Evaluate(context), right.Evaluate(context)); 

C#中的Type参数约束非常有限, 在此处列出 。 所以答案是编译时检查没有。 如果T是您创建和管理的类型,那么可以采用一种方法

 interface IAddable { IAddable Add(IAddable foo); } 

并为所有类型实现IFoo,并使用where T: IAddable作为约束并使用Add()而不是+

使用通用约束可以强制T

  • 作为引用类型或值类型
  • inheritance某个class级
  • 实现某些接口
  • 拥有无参数构造函数

但就是这样。 你不能强制存在静态operator+

你的意思是通用约束吗?

http://msdn.microsoft.com/en-us/library/d5x73970.aspx