C#从字符串表达式调用成员,例如&引用;DateTime.Today“&引用;

C#从字符串表达式调用成员,例如&引用;DateTime.Today“&引用;,c#,dynamic,.net-4.0,expression,C#,Dynamic,.net 4.0,Expression,在为项目编写代码时。我遇到了需要通过字符串表达式调用方法或类型成员的情况。例如,我想将DateTime.Today值的结果放入结果框或变量中 有没有办法从字符串表达式调用函数或类的成员 下面是我正在寻找的一些例子 DateTime.Now DateTime.Today.ToString(“dd-MM-yyyy”) Environment.SpecialFolder.ApplicationData 上面是一些表达式,用户可以传递到文本框中,并通过任何按钮调用它们来获得结果 在这里,您可以找到一个有

在为项目编写代码时。我遇到了需要通过字符串表达式调用方法或类型成员的情况。例如,我想将DateTime.Today值的结果放入结果框或变量中

有没有办法从字符串表达式调用函数或类的成员

下面是我正在寻找的一些例子

  • DateTime.Now

  • DateTime.Today.ToString(“dd-MM-yyyy”)

  • Environment.SpecialFolder.ApplicationData


  • 上面是一些表达式,用户可以传递到文本框中,并通过任何按钮调用它们来获得结果

    在这里,您可以找到一个有效的解决方案,其中包含动态编译链接:

    这应该可以解决您的问题,但它并不是真正安全的。 根据代码执行或“检查”的范围,我将创建自己的命令/规则,以“保存”一方,并防止注入(邪恶)代码的可能性


    我希望这会有所帮助。

    如果表达式的第一部分始终是类型,则可以使用反射创建类型。例如,类似这样的事情:

            string theType = "System.DateTime";
            Type t = Type.GetType(theType);
            Object o = Activator.CreateInstance(t);
    
    但是要调用方法/属性,您必须将对象强制转换为该类型,但直到运行时才知道该类型,因此这将是有问题的

    我想你应该重新考虑一下你的方法。也许你可以给用户一个界面,让他们可以从列表中选择一些选项来构建他们的表达式。例如,让他们选择DateTime、Environment等,然后根据该选择为他们提供其他选项以供选择(例如,如果他们选择DateTime等,现在)


    像您正在尝试的那样,对表达式进行自由形式的解析将非常困难,充其量只能说是黑客行为。

    查看表达式树阅读此内容,它可能会提供一个解决方案:您可以使用反射API实现示例1和3。“但除此之外,它变得很棘手。”DonBoitnott谢谢你的链接。但这是一个耗时的过程。你的意思是当它编译和执行时,执行会很慢吗?这不是答案。相反,你应该把它标记为一个重复的答案,并给原始答案打分。我认为附加的评论会增加价值&使它不再是一个重复的答案。也许吧。我把这个链接作为解决方案,如果不是的话,我会复制有效的答案,并将其标记为重复。(-1真的吗?!)好吧,如果你这么认为的话。这就是我在这里提出这个问题的原因。:)