如何在C#里面象js一样可以直接计算字符串的值

2016-01-29 12:32 6 1 收藏

如何在C#里面象js一样可以直接计算字符串的值,如何在C#里面象js一样可以直接计算字符串的值

【 tulaoshi.com - ASP.NET 】

今天在论坛里面逛发现一个问题比较典型,我们在使用js的时候可以直接使用Eval得到某一个表达式的值,在C#里面可以吗?答案是肯定的,在.NET提供的丰富的类库里面这是可以实现的,但是没有js那么简单下面我将使用一个简单的例子来说明利用编译器和反射得到一个字符串表达式的值。我们建立一个Windows窗体里面有如下的方法:引用一下命名空间:using System;using System.Text;using System.CodeDom.Compiler;using System.Reflection;using System.IO;using Microsoft.CSharp;命名空间的具体意义就不说了,下面看看代码,为了可以让我们的工程可以重复使用我们新建一个类库工程名叫:CoustomEval其中有一个类是用来计算某一断字符串的值。详细代码如下所示:namespace CoustomEval{ /// /// Summary description for Class1. /// public class MyEval{ public MyEval(){ // // TODO: Add constructor logic here // } public object Eval(string cCharpCode){ CSharpCodeProvider csharpCodeProvider = new CSharpCodeProvider(); ICodeCompiler compiler = csharpCodeProvider.CreateCompiler(); CompilerParameters cp = new CompilerParameters(); cp.ReferencedAssemblies.Add("system.dll"); cp.CompilerOptions = "/t:library"; cp.GenerateInMemory = true; StringBuilder myCode = new StringBuilder(); myCode.Append("using System;"); myCode.Append("namespace CoustomEval{"); myCode.Append("class myLib {private "+cCharpCode+" public int myMethod(){return i;}}"); myCode.Append("}"); CompilerResults cr = compiler.CompileAssemblyFromSource(cp,myCode.ToString()); Assembly assembly = cr.CompiledAssembly; object tmp = assembly.CreateInstance("CoustomEval.myLib"); Type type = tmp.GetType(); MethodInfo mi = type.GetMethod("myMethod"); object result = mi.Invoke(tmp,null); return result; } }} 上面的类库只具有一般代表性不具备一般使用性,重要的是提供一种方法来实现它,所以我在里面使用了硬编码的方式,如果你喜欢可以使用其他的方式,包括读文件,读数据库取得代码段等等。然后我们在建立一个测试工程,该工程里面有一个测试窗体,该窗体上有一个按钮和两个文本框,其中一个文文本框用来输入要计算的值,另一个显示计算的结果,详细代码如下:private void button1_Click(object sender, System.EventArgs e) { MyEval eval = new MyEval(); object result = eval.Eval(this.textBox1.Text); this.textBox2.Text = result.ToString(); }在这个工程中需要引用上面的工程,这样我们就可以使用MyEval类来实现计算TextBox1里面的值了,最后可以将值显示在TextBox2里面,代码运行的结果我在这里就不帖了。只给出我的测试结果,由于该问题源于论坛所以我就是用论坛中原来的测试要求。测试结果:在TextBox中输入int i = 10;点击Button1以后将会在TextBox2中显示出10。当然你可以使用更复杂的计算表达式!这里的目的是为了给您指出实现该功能的做法,至于实现的复杂程度读者可以自己决定。谢谢阅读,文中有什么错误和遗漏,请指正,也可以直接给我来信 wu_jian830@hotmail.com。

来源:http://www.tulaoshi.com/n/20160129/1486476.html

延伸阅读
--功能:提供字符串的替代聚合函数 --说明:例如,将下列数据 --test_id test_value -------------------- 'a' '01,03,04' 'a' '02,04' 'b' '03,04,08' 'b' '06,08,09' 'c' '09' 'c' '10' --转换成test_vlaue列聚合后的函数,且聚合后的字符串中的值不重复 --test_id test_value -------------------- 'a' '01,03,04,02' 'b' '03,04...
十六进制字符串与数值类型之间转换(C# 编程指南) 以下示例演示如何执行下列任务: 获取字符串中每个字符的十六进制值。 获取与十六进制字符串中的每个值对应的字符。 将十六进制 string 转换为整型。 将十六进制 string 转换为浮点型。 将字节数组转换为十六进制 string。 示例 此示例输出 string 中的每个字符的十六进制值。首先,...
在string方法中,如ToUpper等字符串操作方法,都会产生一个新的字符串,这样增大了运行开支。一个替代方案是通过非托管代码直接操作字符串。如替代ToUpper方法:using System; public class Test{ public static void Main(string[] args) { string str = "hello"; ToUpper(str); Console.WriteLine(str); } private static uns...
标签: Web开发
js字符串转换成数字 将字符串转换成数字,得用到 parseInt 函数。 parseInt(string) : 函数从string的开始解析,返回一个整数。 举例:parseInt('123') : 返回 123(int); parseInt('1234xxx') : 返回 1234(int); 如果解析不到数字,则将返回一个NaN的值,可以用isNaN()函数来检测; 举例 : var...
标签: Web开发
自动将双字节字符长度计算为2,取字符时也按照单字节的长度取,如2即取1个汉字或两个字母,1取一个汉字或字母。 [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

经验教程

976

收藏

21
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部