所以我对C#有些新意,我不能为我的生活找出如何做到这一点。我已经阅读了如何使用CodeDom http://msdn.microsoft.com/en-us/library/saf5ce06.aspx来做到这一点,但我无法得到任何工作。例如:
string toExecute = "Console.WriteLine('Hello world')";
//如何使它成为可执行的toExecute。即:执行(toExecute);
输出:
你好世界!
我已经尝试了这个并且我一直收到错误(我甚至不理解它!):
string toExecute = "Console.WriteLine('Hello World')";
Type thisType = this.GetType();
MethodInfo theMethod = thisType.GetMethod(toExecute);
theMethod.Invoke(this, null);
所以,如果有人能给我一个如何做这件事并解释它的例子,那么我可能会从那里工作(如果它甚至可能)。 提前致谢
答案 0 :(得分:2)
我没有在这台电脑上使用我的视觉工作室,所以没有运行它,但我认为这应该有效:
object[] parametersArray = new object[] { "Hello" };
MethodInfo writeLine = typeof(Console).GetMethod("WriteLine", new Type[] {typeof(string)});
writeLine.Invoke(null, parametersArray)
也许发布你想要完成的东西,做这种东西是痛苦的屁股,特别是如果你更新.net
答案 1 :(得分:0)
CodeDOM是最简单的方法之一。但无论如何,这是一项相当困难的任务,因为C#不是为此而设计的。它是静态编译语言的基本基础之一,所有代码必须事先在编译时知道,因为它不会像使用普通字符串那样动态解释,即使它包含有效代码。真的,重要的是执行的是exe / dll中的字节码。
尝试这些事情通常也不是一个好主意,因为你完全失去了编译器给你的安全性,并且当动态生成的代码中出现问题时,使代码更难调试。这是一个非常先进的功能,如果你是新手,不适合学习。这样的事情在其他动态语言中很常见,但对于C#来说非常复杂。
顺便说一下,你想特别做点什么吗?或者只是询问是否可能?可能有更简单的方法来做同样的事情,而不需要求助于运行时代码生成。