C# 从字符串C获取代码#

C# 从字符串C获取代码#,c#,string,C#,String,我有一个字符串,需要将该字符串转换为代码 string s = "Method1"; string s_1 = "()"; s = s + s_1; switch ((irrelevant)) { case 1: (i need the string to code here to enable the Mehod1) break; } void Method1() { } 有什么方法可以做到这一点吗?使用反射,您可以通过名称(不带括号的名称)

我有一个字符串,需要将该字符串转换为代码

string s = "Method1";
string s_1 = "()";
s = s + s_1;
switch ((irrelevant))
{
    case 1:      
       (i need the string to code here to enable the Mehod1)
       break;
}

void Method1()
{
}

有什么方法可以做到这一点吗?

使用反射,您可以通过名称(不带括号的名称)调用方法,只需使用名称即可

如果只需要按名称执行方法,则必须接受此解决方案

例如,如果您的方法在名为
ClassWithMethods

Type type = typeof(ClassWithMethods);
MethodInfo methodInfo = type.GetMethod("Method1");
result = methodInfo.Invoke(this, null);

invoke的第一个参数之所以使用它,是因为它运行的是相同的intance,但是这个参数要求调用方法或构造函数的对象。如果方法是静态的,则忽略此参数。如果构造函数是静态的,则此参数必须为null或定义构造函数的类的实例

您可以使用反射来执行此类操作,但几乎可以肯定有更好的方法来解决问题。如果你解释了你的实际目标,我们可能会提出一些更简单/更好的建议。你是说以代码的形式动态运行文本字符串吗?就像您的字符串是printf(“hello world”);有一些Reflection.emit、脚本,还有IronRuby/IronPython。但是如果你只是在做基本的算术,表达式解析器可能会更好。@user2684089你最好使用脚本语言。据我从你的问题和评论中了解,你没有足够的知识来使用反射,除非有人写了who这是你想要的吗?…@user2684089我有一个类似的问题,我的解决方案是创建一个相当于字符串和委托的哈希表,然后当我接受输入时,在哈希表中查找字符串的方法。我想这对回答这个问题有很大帮助,但我个人不理解代码后面的文本。请重写。使用问题中的变量也是一个好主意(例如,我假定
“方法名"
相当于不带括号的
s
。恐怕这不是写一个a=b+c的方法,然后用参数调用它。换句话说,你必须事先编写所有你可能想要运行的代码。这并不难,不过对于一段代码来说,这一点似乎有些过分,你必须知道它是什么t在括号中,用于设置所有内容。答案已更新,yes@owlstead将等同于不带括号的s