C# 如何将字符串解析为func以在运行时使用?
如何允许用户在winforms应用程序中输入字符串,然后使用反射来解析可在运行时执行的字符串C# 如何将字符串解析为func以在运行时使用?,c#,C#,如何允许用户在winforms应用程序中输入字符串,然后使用反射来解析可在运行时执行的字符串 谢谢,这可能会给你一些提示。这可能会给你一些提示。你不能使用反射来解析字符串 您可以使用该类将字符串(假设它包含C#)编译成临时程序集。从中,您可以创建对象、找到对象上的方法并执行它们。您不能使用反射来解析字符串 您可以使用该类将字符串(假设它包含C#)编译成临时程序集。从中,您可以创建对象、找到对象上的方法并执行它们。我认为安全漏洞很多,除非您非常小心地这样做!但是,如果您真的想这样做,您将需要研究使
谢谢,这可能会给你一些提示。这可能会给你一些提示。你不能使用反射来解析字符串
您可以使用该类将字符串(假设它包含C#)编译成临时程序集。从中,您可以创建对象、找到对象上的方法并执行它们。您不能使用反射来解析字符串
您可以使用该类将字符串(假设它包含C#)编译成临时程序集。从中,您可以创建对象、找到对象上的方法并执行它们。我认为安全漏洞很多,除非您非常小心地这样做!但是,如果您真的想这样做,您将需要研究使用。由于C#还不是(尚未)a,它没有
eval
特性,使用CodeDOM动态编译程序集是最接近的
例如,请参见我的答案,它使用
CSharpCodeProvider
和CodeDOM来实现目标。不过要小心,如果你想让你的应用程序更加安全,你会希望用自己的AppDomain运行代码,可能还有自己的进程(使用某种形式的IPC)。我认为,除非你非常小心地这样做,否则安全漏洞会很多!但是,如果您真的想这样做,您将需要研究使用。由于C#还不是(尚未)a,它没有eval
特性,使用CodeDOM动态编译程序集是最接近的
例如,请参见我的答案,它使用CSharpCodeProvider
和CodeDOM来实现目标。不过要小心,如果你想让你的应用程序更加安全,你需要用自己的AppDomain运行代码,可能还有自己的进程(使用某种形式的IPC)。可能会对你有所帮助
从中提取的待办事项列表:
附言-别这样 执行什么?类中的方法?数学表达式?有关要执行的操作的更多详细信息。抱歉。类中以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