- 題名: C#で変数の中身を実行する
 - 日時: 2003/08/26 18:26:34
 - ID: 462
 - この記事の返信元: 
- (なし)
 
 - この記事への返信: 
- [507] Re[1]: C#で変数の中身を実行する2003/08/29 16:04:11
 
 - ツリーを表示
 
> とてもわかりにくいのですが、C#で変数の中身を実行するにはどうすればいいのでしょうか。
using System.CodeDom.Compiler;
    //-------+---------+---------+---------*---------+---------+---------+
    // 記述された数式を計算する (少々難有)
    //-------+---------+---------+---------*---------+---------+---------+
    private static string DynamicCalc(string expression) {
      //ソースコードを生成
      string source = "using System;"
                    + "public class CalcClass {"
                    + "  public static double Calc() {"
                    + "    return %ReplacePart%;"
                    + "  }"
                    + "}";
      source = source.Replace("%ReplacePart%", expression);
      //InMemoryコンパイル
      CompilerParameters cparam = new CompilerParameters();
      cparam.ReferencedAssemblies.Add("System.dll");
      cparam.GenerateInMemory = true;
      CompilerResults cresult = new CSharpCodeProvider().
        CreateCompiler().CompileAssemblyFromSource(cparam, source);
      //アセンブリを呼び出して結果を取得
      Type t = cresult.CompiledAssembly.GetType("CalcClass");
      return ((double)t.GetMethod("Calc").Invoke(null, null)).ToString();
    }
とすれば、それなりに計算できますが(Math.Sqrt()とかも書ける)、
ヘッダにあるとおり少々難有です。(^^;
・小数点で欲しいところは、ちゃんと 10/3d とかする必要あり
・メモリに毎回アセンブリが読み込まれるので、
  いつかOutOfMemoryになる可能性大。
後者はAppDomainを分ければ対処可能かも。
個人的には、DBを用意してSQLで投げてしまうのが手軽でいいと思う。
とてもわかりにくいのですが、C#で変数の中身を実行するにはどうすればいいのでしょうか。
例えば、
//-------------------------
string A,i;
A = "19+7*3";
i = //Aを実行した答え;
MessageBox.Show (i);
//-------------------------
を実行すると、40と書かれたメッセージボックスが表示されるということです。
こんなことはできないのでしょうか?
よろしくお願いします。