2011-09-13 57 views
2

我想做一個應用程序文件。到目前爲止,我有一個名爲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; } 
} 

可能結果的可能是:

5 : Int32 
true : Boolean 
DADACC : Color 
"Hello World!" : String 
10.0 : Double 
13/11/1986 : DateTime 

現在我要總結/分/ POW/...兩個結果,但我真的不想將完成所有的工作。在C#中,您可以將它們混合在一起並獲得答案。

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

有沒有簡單的方法來處理這個問題?或者我必須自己弄清楚所有的組合? I'm想是這樣的:

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

什麼將一個布爾到色彩的力量有多大? – Coeffect

+1

這聽起來像你真正想要的是一種編程語言。你真的想用這個解決什麼問題? – StriplingWarrior

+2

它全部在C#中起作用,因爲*編譯器會計算出哪些運算符適用(如果有)並生成正確的IL *。這一步是<輕描淡寫>不平凡。 – dlev

回答

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); 
     } 
    } 
    } 
} 
+0

SWEEEEEEEEEEET !!!完美工作。謝謝! –

+0

你能解釋一下爲什麼這是行得通的嗎?它的工作原理,但如何?:D –

+1

我很想解釋,如果我能,但話題是大而複雜的,我可能不會這樣做正義。基本上它是「動態語言運行時」的一部分,意味着支持Ruby和Python等動態語言。其基本思想是編譯器編寫代碼,記錄您正在嘗試使用動態類型的內容,然後在運行時運行時系統找出如何執行此操作。通過「您正在嘗試做什麼」,我的意思是不僅僅使用運算符,就像我們上面的示例一樣,還包括函數調用,訪問屬性,顯式類型轉換或轉換等。 –