百行代码轻松实现C#中的Eval函数
来源:互联网 发布:python urllib2 rest 编辑:程序博客网 时间:2024/05/22 02:23
使用过Javascript中的Eval函数的兄弟肯定对这个函数情有独钟,该函数能动态的执行我们传递进去的表达式。使用Eval函数咱们能轻松的制作可编程的程序,那C#是否也有这样的函数呢?答案是肯定的,不过C#并没有实现现成的方法供我们使用。但是这并不能阻止咱们这帮爱偷懒的程序员们。
现在我们就在C#中实现一个Eval函数吧,具体操作如下:
图1
图2
图3
图4
程序代码
using System;using System.Linq;using System.Text;using System.Collections.Generic;using System.CodeDom.Compiler;using Microsoft.CSharp;using System.Reflection;namespace CSHARP_EVAL_FUNCTION{ public class EVAL { private static string prefix = @"using System; public static class DynamicClass { public static void Bomb() {"; public static string postfix = @"}}"; public string content { get; set; } public void Eval() { if (content == "") { Console.WriteLine("必须为Content属性赋予值"); return; } string code = prefix + content + postfix; CompilerResults result = null; using (var provider = new CSharpCodeProvider()) { var options = new CompilerParameters(); options.GenerateInMemory = true; result = provider.CompileAssemblyFromSource(options, code); if (result.Errors.HasErrors)//编译有错误 { var errorMsg = new StringBuilder(); foreach (CompilerError error in result.Errors) { errorMsg.AppendFormat("Line:{0},Column:{1},Content:{2}", error.Line, error.Column, error.ErrorText); } Console.WriteLine(errorMsg.ToString()); } else//运行类 DynamicClass 中的HelloWorld方法 { Type dynamicClass = result.CompiledAssembly.GetType("DynamicClass"); dynamicClass.InvokeMember("Bomb", BindingFlags.InvokeMethod | BindingFlags.Static | BindingFlags.Public, null, null, null); } } } }}
源码下载
- 百行代码轻松实现C#中的Eval函数
- C# 中的eval ()函数
- C#利用反射实现(js)Eval,asp(Execute)功能 动态执行类库中的函数
- C#动态执行类库中的函数:利用反射实现(js)Eval,asp(Execute)功能
- C# eval()函数浅谈
- javascript中的eval函数
- Javascript中的eval函数
- json中的eval函数
- Js中的eval函数
- Js中的eval函数
- Js中的eval函数
- Javascript中的eval函数
- JavaScript中的eval()函数
- Js中的eval()函数
- javascript中的eval函数
- javascript中的eval函数
- python中的eval函数
- JavaScript中的eval函数
- SWIG
- C++ How To Program整理(12)
- 【SqlServer】sql复制表定义及复制数据行
- HDU2149 Public Sale,巴什博奕
- Kryo简介及代码阅读笔记
- 百行代码轻松实现C#中的Eval函数
- 关于SharePoint页面速度优化的一个小技巧
- poj1603 Floyd最短路
- Java 中 trim() 移除开端和结尾的空白字符(不单单是空格)
- Java 6 开发 WebService
- linux下c语言的大小端
- poj1877模拟题
- Linux服务器多进程模型
- c++中冒号(:)和双冒号(::)的用法和c/c++ 位域结构体