一尘不染

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

c#

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

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

谢谢 :)


阅读 280

收藏
2020-05-19

共1个答案

一尘不染

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));
2020-05-19