关于C#交互式窗口(C# Shell REPL Interpreter Interactive)
一、写在前面
C#交互式窗口,来源与,我在写程序时,突然想到我一个语句有问题
string.IsNullOrEmpty(Imei.Trim())/*因为我要判断一个字符串对象是否为null或空字符,却对变量进行了Trim()函数操作,这个函数是对null是会报异常的。*/
我想让句代码在编译器上运行下,看看是不是这么回事。
因为之前一个项目的原因我用过Python(并且最近一段时间我睡前都是看Python的书),非常喜欢Python的交互式窗口,敲完代码回车一下,就可以执行立,立即看到效果。
由此我想到C#或者.Net是否有这样的交互式窗口呢?就此有了我此篇文章。
二、相关链接
C# Eval: An Embeddable Compiler,作者在08年写的一篇文章,尝试根据Repl自己写一个C#Shell。
Ironpython,.Net版本的Python,里面保留Python的交互式窗口。
Snippet Compiler,初衷就为开发者临时测试C#代码的一个机器简化的调试环境,非常不错。
CsharpRepl,Mono下面的C#Shell,它提供了完整原生态的C#Shell功能,就是基于Mono平台的。
在.NET平台下使用C#交互式控制台(上):简介,国人对于C#交互式讨论,博主非常赞赏Mono平台。
浅谈 C# 交互窗口、再谈 C# 交互窗口,国人自己一直Repl的经历,结果是失败了。
.NET代码快速转换成powershell代码,国人写的用Pshell代替类似的功能。
三、正文
进过搜索与参考一些资料我得到的结论
直接针对.Net的C#Shell确实没有,但或多说少有一些替代的解决方法。
1).使用轻量级的.Net调试工具,比较出名的是Snippet Compiler、SharpDevoloper。
其中这个Snippet Compiler这是一个非常轻量级的开源IDE,其存在的初衷就是为了方便开发者进行快速代码测试,简化一切非测试代码的工作(如保存文件、构造完整的命令行类、输入输出、异常管理)。其默认新建的代码窗口,就封装成一个用于代码调试的代码模版,包括打包Main()函数、简化的命令行输入输出函数。你所要做的操作就是在其生成的RunSnippet类中写上你需要测试的代码,然后点击Start运行。
2).使用F#、Ironpython、Ironruby这类运行.Net上的其他语言。
如果你熟悉这些.Net平台上的语音,你就多一个选择,这类函数语言或者脚本语言都有自己的交互式窗口(Python与Ruby本身就是交互式语言,在移植到.Net环境中也保留了这一特性,F#在VS2010中就自带交互式工具)。这些语言的特点都是直接运行于微软的.Net类库,除了语言在自身语法与C#的区别外,但在调试.Net类库时它们的兼容性肯定最好。
3.)使用Mono项目中的CsharpRepl。
这看似是一个令人激动的项目。直接C#的交互式窗口。可惜它是运行在Mono下面(有人说不会移植到到.Net下吗?是的有人已经这么做了,可惜还没成功.再谈 C# 交互窗口\C# Eval: An Embeddable Compiler这两篇文章都是尝试移植Repl而没有成功)。Mono毕竟不是.Net,所以你调试简单的C#语法是可以的,但是一旦涉及到Mono与.Net差别的地方,那就恼人了。而且这个交互窗口并没有提供友好的提示功能,完全靠自己代码书写水平。
虽然这三个办法都有各自的缺点,但至少说明互联网上有这样功能的需求,并且有人对此进行了尝试,我们只能希望于尽早有原生态的基于.Net的C#Shell诞生。目前我们只能用上面三个方法之一来解决。我个人比较推荐Snippet Compiler。