0

所以我对 C# 有点陌生,我一生都无法弄清楚如何做到这一点。我已经阅读了如何使用 CodeDom http://msdn.microsoft.com/en-us/library/saf5ce06.aspx来做这件事,但我什么也做不了。例如:

string toExecute = "Console.WriteLine('Hello world')";

//我将如何使 toExecute 是可执行的。即:执行(执行);

输出:

你好世界!


我已经尝试过了,但我一直收到错误消息(我什至不明白!):

string toExecute = "Console.WriteLine('Hello World')";
Type thisType = this.GetType();
MethodInfo theMethod = thisType.GetMethod(toExecute);
theMethod.Invoke(this, null);

因此,如果有人可以给我一个关于如何做这件事并解释它的例子,那么我可能可以从那里开始工作(如果可能的话)。提前致谢

4

2 回答 2

2

我在这台计算机上没有我的视觉工作室,所以没有运行它,但我认为这应该可以工作:

object[] parametersArray = new object[] { "Hello" };
MethodInfo writeLine = typeof(Console).GetMethod("WriteLine", new Type[] {typeof(string)});
writeLine.Invoke(null, parametersArray)

也许发布你想要完成的事情,做这种事情是一件很痛苦的事情,特别是如果你是.net的新手

参考:http: //msdn.microsoft.com/en-us/library/a89hcwhh.aspx

于 2013-07-25T01:55:27.693 回答
0

CodeDOM 是最简单的方法之一。但无论如何,这是一项相当艰巨的任务,因为 C# 并不是为此而设计的。它是静态编译语言的基本基础之一,所有代码必须在编译时事先知道,因为它不会像使用纯字符串那样即时解释,即使它包含有效代码。确实,重要并被执行的是 exe/dll 中的字节码。

尝试这些东西通常也不是一个好主意,因为您完全失去了编译器为您提供的安全性,并且当动态生成的代码中出现问题时,会使您的代码更难调试。这是一项相当高级的功能,如果您是新手,则不适合学习。这样的事情在其他动态语言中很常见,但对于 C# 来说是相当复杂的。

顺便说一句,您是否特别想完成某事?还是只是问有没有可能?可能有更简单的方法来做同样的事情,而无需求助于运行时代码生成。

于 2013-07-25T02:06:44.547 回答