C#的CSREPL-REPL

CShell (REPL) :轻量级、可扩展(dll)、 支持C#语法 的接口算法验证工具 发现一个开源小工具——CShell CShell方便进行各种简单的C#代码测试,比如接口验证,算法验证等等。完成相应工作 Visual Studio往往太重。该工具基于NRefactory、Mono.CSharp和Roslyn等项目开发完成。 什么是CShell? CShell是一个交互式的C#脚本环境。 它允许你在一个类似于控制台的环境中使用C#,而不需要任何繁琐的操作,这个环境被称为read-eval-print-loop(REPL)。 代码直接在shell窗口中编译和执行,不需要单独.. 阅读详情

原文:CSREPL - REPL for C#  

在ChrisAn忙于将Python寄宿于AvPad之时,我在思考为什么他不把C#也同时考虑进去呢?

作为一项生存能力的测试,我在10分钟内,编写了一个简单的REPL程序,它支持C#表达式和语句的命令行解析。

下面是它的基本使用方法:
>1+2+3
6
>DateTime.Now.ToString("T");

4:12:36 PM

为了支持交叉表达式变量,我定义了两个内置的函数,Set 和 Get:

>Set("X",32)
32
>Get("X")
32

为了支持调用任意的代码块,我定义了一个能够解析void(void) 代理的 Invoke方法:

> Invoke(delegate { for (int i = 0; i < 6; i++) Console.WriteLine(i); })

0

1

2

3

4

5

下面是原代码,在Whidbey Beta2下,将其编译为Console程序。

using  System;
using  System.Collections.Generic;
using  System.Reflection;
using  System.Text;
using  System.CodeDom;
using  System.CodeDom.Compiler;

 

namespace  csrepl  {
    
class Program {

 

        
static string funcprefix = "using System; "
            
+ "public delegate void Proc(); "
            
+ "public class Wrapper {  "
            
+ "  public static object Set(string name, object value) {  "
            
+ "    AppDomain.CurrentDomain.SetData(name, value); "
            
+ "    return value;  "
            
+ "  } "
            
+ "  public static object Get(string name) {  "
            
+ "    return AppDomain.CurrentDomain.GetData(name); "
            
+ "  } "
            
+ "  public static object Invoke(Proc proc) {  "
            
+ "    proc(); "
            
+ "    return null;  "
            
+ "  } "
            
+ "  public static object Eval() { return  ";
        
static string funcsuffix = ";  } }";

 


        
static string StringEval(string expr) {
            
string program = funcprefix + expr + funcsuffix;

 

            ICodeCompiler compiler 
= CodeDomProvider.CreateProvider("C#").CreateCompiler();
            CompilerParameters cp 
= new CompilerParameters();
            cp.GenerateExecutable 
= false;
            cp.GenerateInMemory 
= true;

 

            CompilerResults results 
= compiler.CompileAssemblyFromSource(cp, program);
            
if (results.Errors.HasErrors) {
                
if (results.Errors[0].ErrorNumber == "CS0029")
                    
return StringEval("Invoke(delegate { " + expr + "; })");
                
return results.Errors[0].ErrorText;
            }

            
else {
                Assembly assm 
= results.CompiledAssembly;
                Type target 
= assm.GetType("Wrapper");
                MethodInfo method 
= target.GetMethod("Eval");
                
object result = method.Invoke(null, null);
                
return result == null ? null : result.ToString();
            }

        }


 

        
static void Main(string[] args) {

 

            
while (true ) {
                Console.Write(
"> ");
                Console.Out.Flush();
                
string expr = Console.ReadLine();
                
if (expr == null)
                    
break;
                
try {
                    
string result = StringEval(expr);
                    Console.WriteLine(result);
                }

                
catch (TargetInvocationException ex) {
                    Console.WriteLine(ex.InnerException.GetType().Name 
+ ": " + ex.InnerException.Message);
                }

                
catch (Exception ex) {
                    Console.WriteLine(ex.GetType().Name 
+ ": " + ex.Message);
                }

            }


        }

    }

}




C#基于CS开发的人力资源管理系统 这是一个基于cs开发的初级人力资源管理系统,希望初学的小白可以学习学习 立即下载

相关推荐

CS开发框架 最新Ribbin版C#源码 界面美观全新升级

开发框架高级版+最新版 独家全面升级: 1.升级界面为无边框Ribbin界面(能够设置成类似office2003、2007/2013等版本的效果),全新启动界面 2.开发工具升级至2010 3.DevExpress升级至最新能破解版本13.2.6 4.提供数据库脚本,任意版本sqlserver均可使用架构采用 C# + sql2008 + WCF 时下最流行组合

c#repl_使用C#和F#REPL的交互式编码(ScriptCS或Visual Studio交互式窗口)

c#replREPLs are great! REPL stands for Read–eval–print loop and is pronounced "REP-L" quickly, like "battle." Lots of languages and environments have interactive coding and REPLS at their heart and ha...

cunfuteng7334的博客 990

比较好的基于CS模式的C#程序框架

C#程序框架,可扩展性强,基于CS模式的C#程序框架

CSharpRepl:一个跨平台轻量级的C#命令行工具

我们在学习C#时,或者临时想要验证一个想法时,需要通过执行C#代码来进行验证。这个时候就有多个选择,打开VS工具、或者使用Web版本的在线工具。这其中可能会碰到,VS打开慢、资源消耗大、Web工具语法支持不优化、网络问题等。下面给大家推荐一个轻量级的可以执行C#代码的工具,就可以很好的满足我们的需求。01项目简介CSharpRepl是一个跨平台的命令行C# REPL(Read-Eval-Print...

dotNET跨平台 508

开源LocalAI本地人工智能安装教程

LocalAI是一款能在本地运行的人工智能应用,它兼容了OpenAI API规范,它可以在普通的电脑运行,不需要GPU,也不需要联网,音频转录

2301_78652552的博客 3615

Ubuntu20.04下Docker无缝升级实战指南

本文提供了一份在Ubuntu20.04系统上安全、无缝升级Docker的实战指南。文章详细阐述了升级前的版本检查、数据备份等准备工作,逐步演示了通过APT包管理器进行升级或指定版本安装的操作步骤,并强调了升级后的验证与常见问题回滚方案,确保业务容器平稳过渡。

postgres8guard的博客 482

Silverlight的中文显示问题

原文:CSREPL - REPL for C#   在ChrisAn忙于将Python寄宿于AvPad之时,我在思考为什么他不把C#也同时考虑进去呢? 作为一项生存能力的测试,我在10分钟内,编写了一个简单的REPL程序,它支持C#表达式和语句的命令行解析。 下面是它的基本使用方法: >1+2+3 6 >DateTime.Now.ToString("T");4:12:36 PM为了支持交叉

软件开发资料汇总 429

POSS-NH2:氨基化笼型聚半倍硅氧烷的合成与应用探索

本文详细介绍了氨基化笼型聚半倍硅氧烷(POSS-NH2)的合成方法与应用。通过水解缩合与官能团转化两种主流路线,可制备出这种关键的纳米增强材料。其核心价值在于通过表面的氨基与树脂基体形成化学键合,从而显著提升复合材料的热稳定性和机械性能。文章以环氧树脂改性为例,展示了POSS-NH2在航空航天、电子封装等高性能领域的应用潜力。

grpc6streamer的博客 499

在Visual Studio中使用C#脚本(CSX脚本)生成代码

目录 介绍 C#脚本(CSX文件) CSX脚本示例 MyProgram.cs MyScript.csx 使用C#REPL(CSI.EXE)运行CSX脚本 程序集引用 NuGet软件包 从PowerShell调用C#REPL(以运行CSX脚本) 从Visual Studio IDE运行 允许未签名的脚本 相关程序集引用 PackageReference(NuGet 4)与packages.config(NuGet 3) 创建一个简单的POCO生成器 介绍 CSX脚本非常强大,因

寒冰屋的专栏 6350

ESD镜像解密与转换全攻略:从esd-decrypter到WinNTSetup的完整流程

本文详细解析了ESD镜像的加密特性与压缩优势,并提供了从解密到转换的完整实战指南。核心步骤包括使用esd-decrypter工具解密ESD文件为WIM格式,以及如何结合WinNTSetup进行灵活的系统安装或进一步封装为可引导的ISO镜像,帮助用户高效处理官方Windows安装镜像。

weixin_29207439的博客 454

【AI工具】Browser use搭建及使用的保姆级教程:让AI帮你自动操作浏览器

【AI工具】Browser use搭建及使用的保姆级教程:让AI帮你自动操作浏览器

funfan的博客 2537
上一篇: 四原则与引退
下一篇: MS 的Surface
techweb
博客等级 码龄19年 226粉丝 3842原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值