如何将两个对象相加?

Mar*_*ann 2 c# types sum operator-keyword

我想做一个pareses文本的应用程序.到目前为止,我有一个名为Result的类,它保存值并输入方程的每个部分.

public enum ResultType
{
    Int32,
    Double,
    Boolean,
    Color,
    DateTime,
    String,
    Undefined,
    Void
}

public class Result
{
    public object Value { get; set; }
    public ResultType Type { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

可能的结果可能是:

 5 : Int32
 true : Boolean 
 DADACC : Color 
 "Hello World!" : String 
 10.0 : Double 
 13/11/1986 : DateTime
Run Code Online (Sandbox Code Playgroud)

现在我想总结/除/// ...两个结果,但我真的不想做所有的工作.在C#中,您可以将它们混合在一起并获得答案.

var value = "Hello" + 2.0 + 4 + DateTime.Today; (value = "Hello2413/09/2011 12:00:00 a.m.")
Run Code Online (Sandbox Code Playgroud)

有一个简单的方法来处理这个?或者我必须自己弄清楚所有组合?我想的是:

var Operator = "+"; // or "-","*","/","^","%"
var sum = DoTheCSharpOperation(Operator, ResultA.Value, ResultB.Value)
var sumResult = new Result(sum);
Run Code Online (Sandbox Code Playgroud)

Cor*_*sak 8

这听起来像是"动态"关键字的完美应用:

using System;
using System.Diagnostics;

namespace ConsoleApplication33 {
  public static class Program {
    private static void Main() {
      var result1=DoTheCSharpOperation(Operator.Plus, 1.2, 2.4);
      var result2=DoTheCSharpOperation(Operator.Plus, "Hello", 2.4);
      var result3=DoTheCSharpOperation(Operator.Minus, 5, 2); 

      Debug.WriteLine(result1); //a double with value 3.6
      Debug.WriteLine(result2); //a string with value "Hello2.4"
      Debug.WriteLine(result3); //an int with value 3
    }

    public enum Operator {
      Plus,
      Minus
    }

    public static object DoTheCSharpOperation(Operator op, dynamic a, dynamic b) {
      switch(op) {
        case Operator.Plus:
          return a+b;
        case Operator.Minus:
          return a-b;
        default:
          throw new Exception("unknown operator "+op);
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 它的功能非常复杂 - 基本上是在运行时做出编译器所做的决定.如果以无纪律的方式使用它,它可能会使您的程序成为维护的噩梦,但在适当的情况下它是非常有用的.这个网页可能是一个开始阅读的好地方:http://www.codeproject.com/KB/cs/TheDynamicKeyword.aspx (2认同)