Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将字符串转换为命令行?c#mac_C# - Fatal编程技术网

将字符串转换为命令行?c#mac

将字符串转换为命令行?c#mac,c#,C#,所以我对C#有点陌生,我一辈子都不知道该怎么做。我已经读过如何使用CodeDom来做这件事,但我就是不能让任何东西起作用。例如: string toExecute = "Console.WriteLine('Hello world')"; //如何使toExecute可执行。i、 e:执行(执行) 输出: 你好,世界 我尝试过这个方法,但一直都会出错(我甚至都不明白!) 因此,如果有人能给我一个关于如何做这件事的例子,并解释它,那么我可能会从那里开始工作(如果可能的话)。 提前感谢我没有在

所以我对C#有点陌生,我一辈子都不知道该怎么做。我已经读过如何使用CodeDom来做这件事,但我就是不能让任何东西起作用。例如:

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)