Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/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# 如何将包含局部变量名的字符串计算为C中的代码#_C# - Fatal编程技术网

C# 如何将包含局部变量名的字符串计算为C中的代码#

C# 如何将包含局部变量名的字符串计算为C中的代码#,c#,C#,我需要一个函数将字符串的值作为C#代码进行求值。字符串包含局部变量和算术运算,函数的工作方式就好像字符串是位于同一位置的代码一样。比如: int a = ...; int b = ...; int c = ...; ... int result = Eval("a+b+c"); // should return current value a+b+c 我们可以将讨论限制在简单的类型上,比如int和它们之间的算术运算。在C#/.Net中可以这样做吗?可以将上下文参数传递给函数,例如,包含所有必需

我需要一个函数将字符串的值作为C#代码进行求值。字符串包含局部变量和算术运算,函数的工作方式就好像字符串是位于同一位置的代码一样。比如:

int a = ...; int b = ...; int c = ...;
...
int result = Eval("a+b+c"); // should return current value a+b+c
我们可以将讨论限制在简单的类型上,比如int和它们之间的算术运算。在C#/.Net中可以这样做吗?可以将上下文参数传递给函数,例如,包含所有必需变量的名称和值


谢谢

声明和初始化变量的前置脚本。例如,如果希望将名为
a
的变量传递到脚本中,请执行以下操作:

var script = string.Format("var a = {0}\r\n", a) + script;
var result = Eval(script);

声明和初始化变量的前置脚本。例如,如果希望将名为
a
的变量传递到脚本中,请执行以下操作:

var script = string.Format("var a = {0}\r\n", a) + script;
var result = Eval(script);

你能看看DataTable.Compute方法吗。有一个链接指向一个很好的项目Eval表达式。net如果不向方法中传递局部变量,就不能真正调用
Eval(“a+b+c”)
方法,除非这是某种代码注入而不是方法调用。若您能够创建环境,那个么codedom是一种简单的方法:只需创建一个长字符串,用局部变量值包含类定义和字段,并将等式包装到方法调用中。在内存中编译,运行,完成。请看这个链接:您能看看DataTable.Compute方法吗。有一个链接指向一个很好的项目Eval表达式。net如果不向方法中传递局部变量,就不能真正调用
Eval(“a+b+c”)
方法,除非这是某种代码注入而不是方法调用。若您能够创建环境,那个么codedom是一种简单的方法:只需创建一个长字符串,用局部变量值包含类定义和字段,并将等式包装到方法调用中。在内存中编译、运行、完成。请参阅以下链接:Eval()是什么?可能我误解了这个问题。我以为OP是在问这个问题:既然能够编译和执行包含c代码的字符串,程序如何传入局部变量?“我需要一个函数”,OP说。既然你不知道什么是
Eval()
,为什么你认为它支持你所建议的答案?我假设
Eval()
是编译函数的占位符,有点像OP使用的是
Foo()
,但有一个更具代表性的名称。正如我所说,我可能误解了这个问题。Eval()是什么??也许我误解了这个问题。我以为OP在问这个问题:既然能够编译和执行包含c代码的字符串,程序如何传递局部变量?“我需要一个函数”——OP说。既然你不知道什么是
Eval()
,为什么你认为它支持你建议的答案?我假设
Eval()
是编译函数的占位符,有点像OP使用的是
Foo()
,但有一个更具代表性的名称。正如我所说,我可能误解了这个问题。