2011-09-13 7 views
2

テキストをパレートするアプリケーションを実行したい。これまでは、Resultと呼ばれるクラスがあり、これは値を保持し、方程式の各部分を入力します。2つのオブジェクトを合計するにはどうすればよいですか?

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/... 2件の結果を合計したいが、私は本当にすべての仕事をしたいドント。 C#では、これらをすべて組み合わせて答えを得ることができます。

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

これを簡単に処理する方法はありますか?それとも、自分ですべてのコンボを理解する必要がありますか? - 私のようなものを考える:

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

色のパワーにブールがどうなりますか? – Coeffect

+1

本当にあなたが望むのはプログラミング言語です。あなたは本当にこれで解決しようとしている問題は何ですか? – StriplingWarrior

+2

コンパイラは、どの演算子が(もしあれば)適用され、正しいIL *を生成するかを把握しているので、C#ですべて動作します。そのステップは、<控えめな>とは言い難いです。 – 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のような動的言語をサポートするためのものです。基本的な考え方は、コンパイラが動的な型で何をしようとしていたかを記録するコードを記述し、次に実行時システムがそれを実行する方法を理解することです。 「あなたがやろうとしていたこと」とは、上の例のように演算子を使うだけでなく、関数呼び出し、プロパティへのアクセス、明示的なキャストや変換などを意味します。 –

関連する問題