百行代码轻松实现C#中的Eval函数

使用过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函数相关推荐

  1. 基于Ganos百行代码实现亿级矢量空间数据在线可视化

    简介: 本文介绍如何使用RDS PG或PolarDB(兼容PG版或Oracle版)的Ganos时空引擎提供的数据库快显技术,仅用百行代码实现亿级海量几何空间数据的在线快速显示和流畅地图交互,且无需关注 ...

  2. js 监听 安卓事件_百行代码实现js事件监听实现跨页面数据传输

    百行代码实现js事件监听实现跨页面数据传输 使用场景 类似消息队列的使用场景,支持同页面和跨页面通信,发送消息和接收消息 技术原理 跨页面通信: 基于事件监听,通过监听 storage事件监听回调机制 ...

  3. 鱼佬:百行代码入手数据挖掘赛!

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:鱼佬,武汉大学,Datawhale成员 本实践以科大讯飞xData ...

  4. Kaggle—So Easy!百行代码实现排名Top 5%的图像分类比赛

    北京 上海巡回站 | NVIDIA DLI深度学习培训 2018年1月26/1月12日 NVIDIA 深度学习学院 带你快速进入火热的DL领域 阅读全文                        ...

  5. python图像分类代码_Kaggle—So Easy!百行代码实现排名Top 5%的图像分类比赛

    Kaggle-So Easy!百行代码实现排名Top 5%的图像分类比赛 作者:七月在线彭老师 说明:本文最初由彭老师授权翟惠良发布在公众号"七月在线实验室"上,现再由July重新 ...

  6. Python百日百行代码挑战-day8,day9,day10,游戏实战系列-五子棋

    Python百日百行代码挑战-day8,day9,day10,游戏实战系列-五子棋 写在前面 需要用到的工具包和参考 游戏设定 初始化 切换下棋方 判断五子连珠(核心) 鼠标点击流程事件 成品展示 打 ...

  7. c语言程序2000行代码,C语言教务管理系统2000行代码

    <C语言教务管理系统2000行代码>由会员分享,可在线阅读,更多相关<C语言教务管理系统2000行代码(56页珍藏版)>请在读根文库上搜索. 1.C语言教务管理系统一.程序结构 ...

  8. 软件工程c语言2000行代码,C语言教务管理系统(2000行代码)

    <C语言教务管理系统(2000行代码)>由会员分享,可在线阅读,更多相关<C语言教务管理系统(2000行代码)(56页珍藏版)>请在人人文库网上搜索. 1.C语言教务管理系统一 ...

  9. 百行代码打造一个DI容器(支持瞬时生命周期、单利生命周期、构造函数自动注入、属性自动注入、字段自动注入)...

    DI注入在.Net平台是非常流行的, 很多项目都用到了,很多开发人员或多或少也用到DI容器了,感觉DI容器很神奇很厉害.本文将通过百行代码展示DI容器的内部核心代码(包括组件的瞬时生命周期.单利生命周 ...

  10. 猜猜乐游戏php源码,C/C++百行代码实现热门游戏消消乐功能的示例代码

    游戏设计 首先我们需要使用第三方框架,这里我使用的是sfml,不会使用sfml在我的上几篇文章当中-扫雷(上)有详细的开发环境搭建介绍 首先准备图片资源 一张背景图片,一张宝石图片 窗口初始化加载图片 ...

最新文章

  1. conda常用命令整理
  2. 华为2019暑期实习笔试题
  3. linux 如何让.开头的文件不隐藏_如何使用 BusyBox 制作Linux最小文件系统
  4. android qq红包,Android实现QQ抢红包插件
  5. java tcp 线程_java 网络协议(一)Tcp多线程服务器端编程
  6. JavaSE基础——数组概述和定义格式说明
  7. win10怎么修复网络连接服务器失败,微软发布修复补丁修复Win10无网络连接问题...
  8. 互联网协议 — Ethernet 以太网协议
  9. gis核密度分析工具_核密度分析工具的初探(Kernel Density)
  10. coreldraw16开三折页_cdr印刷设计排版教程,教你三折页设计制作方法
  11. 论文-《Conversational Recommender System》
  12. 计算机二级需要报班,计算机二级需要报班培训吗
  13. 计算机找不管理员,Win7系统鼠标右键找不到“管理员获取所有权”选项怎么办...
  14. nginx + ftp搭建文件服务器
  15. 56、公众聚集场所的防火巡查要求
  16. 【SPH模型入门】很适合于新手的一篇文章
  17. DeepHPV:一个用于预测HPV整合人类基因位点的深度学习模型
  18. MOSFET的双脉冲测试-1
  19. 【DFT】安装octopus
  20. php解决01背包问题,php实现01背包问题之动态规划

热门文章

  1. 第十二节 JS事件高级应用
  2. matlab画gds图,Matlab GDS流程.doc
  3. oracle remote diagnostic agent,Oracle数据库收集、分析工具RDA(RemoteDiagnostic Agent)下载
  4. 12306查询车票信息返回的数据解析
  5. GoldenDict启动进入后台 Ubuntu
  6. 回声状态网络(echo state network,ESN)概述
  7. Flutter从相册选择图片和相机拍照(image_picker)
  8. linux退出编辑菱宏,Confluence 6 空间中的常用宏
  9. 【LaTeX在线编译器】
  10. Unity-安卓端透明背景设置