在C#交互式环境(REPL)中是否可以像Immediate一样自动输出值?

25

我开始使用C# Interactive,喜欢的是我可以像使用Immediate一样浏览和探索某些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个回答

42

是的,如果要输出已评估表达式的结果,则不要在末尾加分号。在您的示例中,应该这样写:

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

做这个:

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

查看文档


1
哇。我怎么会错过它了。谢谢。 - Vitor Canova

13

当你完成一个语句(例如以;结束的声明变量)时,你不会得到任何输出,因为它仅应具有副作用。

当你完成一个表达式(例如没有以;结束的表达式)时,你将得到该表达式的结果。一种解决方法是:

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+来选择以前的一个条目。


好的。谢谢。但是@Crowcoder提供的答案更符合我的需求。已点赞。 - Vitor Canova
1
好的,我现在明白你的问题比陈述的简单。我的回答是基于你想要将值存储在变量中并打印出来,而不仅仅是打印出来。 - acelent
抱歉造成困惑。 - Vitor Canova

4

我知道现在已经有些晚了,但是任何正在寻找类似问题答案的人,以防你想在C#交互窗口中运行for循环并打印值,可以使用Print()方法:

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

1
哇!!这应该成为被接受的答案,我已经搜索了好几个月了!! - Chandraprakash
1
太棒了!这个“Print”函数的文档应该在哪里获取? - Sreenikethan I
1
我找不到任何文档,只是偶然发现了这个 :-) - SavindraSingh
哈哈!!一个彩蛋!! - John Henckel
感谢您撰写这篇答案。我试图打印一个很长的字符串,但是在 C# 交互窗口中被截断了。但是通过这个技巧,我终于可以得到整个字符串了! - Arpit Jain

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接