将字符串转换为命令行?c#mac
所以我对C#有点陌生,我一辈子都不知道该怎么做。我已经读过如何使用CodeDom来做这件事,但我就是不能让任何东西起作用。例如:将字符串转换为命令行?c#mac,c#,C#,所以我对C#有点陌生,我一辈子都不知道该怎么做。我已经读过如何使用CodeDom来做这件事,但我就是不能让任何东西起作用。例如: string toExecute = "Console.WriteLine('Hello world')"; //如何使toExecute可执行。i、 e:执行(执行) 输出: 你好,世界 我尝试过这个方法,但一直都会出错(我甚至都不明白!) 因此,如果有人能给我一个关于如何做这件事的例子,并解释它,那么我可能会从那里开始工作(如果可能的话)。 提前感谢我没有在
string toExecute = "Console.WriteLine('Hello world')";
//如何使toExecute可执行。i、 e:执行(执行)
输出:
你好,世界
我尝试过这个方法,但一直都会出错(我甚至都不明白!)
因此,如果有人能给我一个关于如何做这件事的例子,并解释它,那么我可能会从那里开始工作(如果可能的话)。
提前感谢我没有在这台计算机上安装visual studio,因此没有运行它,但我认为这应该可以:
object[] parametersArray = new object[] { "Hello" };
MethodInfo writeLine = typeof(Console).GetMethod("WriteLine", new Type[] {typeof(string)});
writeLine.Invoke(null, parametersArray)
也许发布你想要完成的事情,做这类事情是一件痛苦的事,尤其是如果你是.net新手的话
参考:CodeDOM是最简单的方法之一。但无论如何,这是一项相当困难的任务,因为C#并不是设计来完成这项任务的。它是静态编译语言的基本基础之一,所有代码都必须在编译时预先知道,因为它不会像处理普通字符串那样被动态解释,即使它包含有效的代码。实际上,重要的是执行exe/dll中的字节码 尝试这些方法通常也不是一个好主意,因为您完全失去了编译器提供给您的安全性,并且在动态生成的代码中出现问题时使代码更难调试。这是一个相当高级的功能,如果你是新手,不利于学习。这样的事情在其他动态语言中很常见,但对于C语言来说则相当复杂
顺便说一句,你是不是想完成一些特别的事情?或者只是问问是否可能?也许有更简单的方法可以做到这一点,而不必求助于运行时代码生成。如果您是C#新手,我建议您不要从代码生成和反射开始。这不是第一件要学的东西!如果你告诉我们你为什么需要这样做,这真的会有帮助;有很多方法可以实现运行时命令,哪种方法最适合您取决于您没有告诉我们的事情。是的,是的,是的。我确实需要它来完成我的工作:-)。代码生成将基于输入和其他内容。我不会保存代码,只是执行它。@user2616745它是在另一种语言(JavaScript)上,但是你读过关于“eval是邪恶的”的文章吗?直接基于输入生成C代码可能存在相当大的安全风险;(1类);,而不是:类型(控制台)??我在LinqPad中运行了你的代码,效果很好。它缺少一个分号,所以我将为您更新它。抱歉,还将变量更改为var,因为它不允许我这样做;作为编辑。@user2616745我不这么认为,您需要为非静态方法引用一个具体类,为静态方法引用一个具体类型(不是字符串)。
object[] parametersArray = new object[] { "Hello" };
MethodInfo writeLine = typeof(Console).GetMethod("WriteLine", new Type[] {typeof(string)});
writeLine.Invoke(null, parametersArray)