Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/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# 如何将字符串解析为func以在运行时使用?_C# - Fatal编程技术网

C# 如何将字符串解析为func以在运行时使用?

C# 如何将字符串解析为func以在运行时使用?,c#,C#,如何允许用户在winforms应用程序中输入字符串,然后使用反射来解析可在运行时执行的字符串 谢谢,这可能会给你一些提示。这可能会给你一些提示。你不能使用反射来解析字符串 您可以使用该类将字符串(假设它包含C#)编译成临时程序集。从中,您可以创建对象、找到对象上的方法并执行它们。您不能使用反射来解析字符串 您可以使用该类将字符串(假设它包含C#)编译成临时程序集。从中,您可以创建对象、找到对象上的方法并执行它们。我认为安全漏洞很多,除非您非常小心地这样做!但是,如果您真的想这样做,您将需要研究使

如何允许用户在winforms应用程序中输入字符串,然后使用反射来解析可在运行时执行的字符串


谢谢,这可能会给你一些提示。

这可能会给你一些提示。

你不能使用反射来解析字符串


您可以使用该类将字符串(假设它包含C#)编译成临时程序集。从中,您可以创建对象、找到对象上的方法并执行它们。

您不能使用反射来解析字符串


您可以使用该类将字符串(假设它包含C#)编译成临时程序集。从中,您可以创建对象、找到对象上的方法并执行它们。

我认为安全漏洞很多,除非您非常小心地这样做!但是,如果您真的想这样做,您将需要研究使用。由于C#还不是(尚未)a,它没有
eval
特性,使用CodeDOM动态编译程序集是最接近的


例如,请参见我的答案,它使用
CSharpCodeProvider
和CodeDOM来实现目标。不过要小心,如果你想让你的应用程序更加安全,你会希望用自己的AppDomain运行代码,可能还有自己的进程(使用某种形式的IPC)。

我认为,除非你非常小心地这样做,否则安全漏洞会很多!但是,如果您真的想这样做,您将需要研究使用。由于C#还不是(尚未)a,它没有
eval
特性,使用CodeDOM动态编译程序集是最接近的

例如,请参见我的答案,它使用
CSharpCodeProvider
和CodeDOM来实现目标。不过要小心,如果你想让你的应用程序更加安全,你需要用自己的AppDomain运行代码,可能还有自己的进程(使用某种形式的IPC)。

可能会对你有所帮助

从中提取的待办事项列表:

  • 使用CodeDom转换和包装用户定义的方法/函数体,并使用适当的方法、类、命名空间等声明(以便准备将源代码编译到内存或物理文件中)

  • 将生成的Dom编译到程序集中(我将使用物理文件)

  • 创建一个单独的应用程序域并将编译后的程序集加载到其中

  • 从加载的程序集中提取生成的方法,并根据执行上下文调用它(在本例中,它将是一个窗口)

  • 释放资源,卸载第二个应用程序域并执行临时文件清理

  • 附言-别这样

    可能对你有帮助

    从中提取的待办事项列表:

  • 使用CodeDom转换和包装用户定义的方法/函数体,并使用适当的方法、类、命名空间等声明(以便准备将源代码编译到内存或物理文件中)

  • 将生成的Dom编译到程序集中(我将使用物理文件)

  • 创建一个单独的应用程序域并将编译后的程序集加载到其中

  • 从加载的程序集中提取生成的方法,并根据执行上下文调用它(在本例中,它将是一个窗口)

  • 释放资源,卸载第二个应用程序域并执行临时文件清理


  • 附言-别这样

    执行什么?类中的方法?数学表达式?有关要执行的操作的更多详细信息。抱歉。类中以func作为参数的方法。反射不分析字符串。编译器(解析器)不需要。根据问题的性质,您可以考虑使用<代码> IrPyththon < /C>、动态LINQ或表达式解析库。我这样做是用从字符串构建类的集合(在找到它之后找不到源)。I/O是通过哈希表进行的。总之,总的来说,这是一个非常糟糕的主意。执行什么?类中的方法?数学表达式?有关要执行的操作的更多详细信息。抱歉。类中以func作为参数的方法。反射不分析字符串。编译器(解析器)不需要。根据问题的性质,您可以考虑使用<代码> IrPyththon < /C>、动态LINQ或表达式解析库。我这样做是用从字符串构建类的集合(在找到它之后找不到源)。I/O是通过哈希表进行的。总之,总的来说,这是一个非常糟糕的主意。“动态语言”(比如C#4.0)通常意味着“动态类型语言”。它与
    eval
    @Mehrdad没有多大关系。我不同意这种说法“动态语言”是一个与“动态类型语言”截然不同的术语。请参阅wikipedia文章以获得澄清:请注意,“eval”被列为动态语言的第一个功能:无论如何,我已经在我的帖子中添加了wiki链接来澄清问题。虽然你对可能存在的安全漏洞的看法大体上是正确的,但有足够多的场景表明他的想法是正确的。他可能正在编写某种开发工具,其中用户也是开发人员。此外,向应用程序中添加脚本以便用户能够扩展其功能也是有意义的。我同意动态语言的广泛定义。我的评论特别适用于C#4.0(可以从“尚未”推断),这是一种动态类型化语言,但没有动态编译。无论如何,我只想指出,
    eval
    和动态类型是正交的,不一定相互需要。“动态语言”(如C#4.0)通常意味着“动态类型语言”。它与
    eval
    @Mehrdad没有多大关系:我不同意这一点。”“动态语言”是一个与“动态类型语言”截然不同的术语。请参阅维基百科的文章以获得澄清:请注意,“eval”列为第一个fe