是否有可能像立即一样在C#Interactive(REPL)中自动输出值?

时间:2016-02-17 13:00:36

标签: c# visual-studio-2015 roslyn read-eval-print-loop c#-interactive

我开始使用C# Interactive,并且我可以浏览和探索一些API功能,就像我使用Immediate一样,而无需运行和调试我的程序。

问题是,除非我使用变量名执行命令,否则它不会像立即那样输出信息:

 > string.Format("{0,15}", 10m);         //hit enter, here there is no output
 > var a = string.Format("{0,15}", 10m); //hit enter so...
 > a                                     // hit enter and...
  "        10"                           //...here the value is shown
 >

有没有办法让C# Interactive输出像Immediate这样的每个评估中的值(并且没有为Console.Write编写更多代码)?

3 个答案:

答案 0 :(得分:21)

是的,要输出已计算表达式的结果,请不要在末尾添加分号。在您的示例中,而不是:

string.Format("{0,15}", 10m);

这样做:

string.Format("{0,15}", 10m)

See the documentation

答案 1 :(得分:8)

当你完成一个语句(例如以;结尾)时,你必须在声明变量时,你不会得到任何输出,因为它是应该只有副作用。

当您使用表达式结束时(例如,不以;结尾),您将获得该表达式的结果。解决方法是:

var a = string.Format("{0,15}", 10m); a

最后注意a作为表达式,您将打印其值。

就个人而言,对于我想测试的多行片段,我通常有一个res变量:

object res;
// code where I set res = something;
using (var reader = new System.IO.StringReader("test"))
{
    res = reader.ReadToEnd();
}
res

每个Visual Studio会话都会发生一次打字开销,但之后我只使用 Alt + 来选择之前的一个条目。

答案 2 :(得分:1)

我知道这为时已晚,但任何正在寻找类似问题答案的人。如果您想在 C# 交互式窗口中运行 for 循环并打印值,您可以使用 Print() 方法:

string Characters = "Hello World!";
> foreach (char _Char in Characters)
. {
.     Print(_Char);
. }
'H'
'e'
'l'
'l'
'o'
' '
'W'
'o'
'r'
'l'
'd'
'!'