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