- 題名: 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と書かれたメッセージボックスが表示されるということです。
こんなことはできないのでしょうか?
よろしくお願いします。