When writing C# in a .NET notebook, the C# scripting dialect is used, which you might be familiar with from using the C# Interactive window in Visual Studio. This dialect of C# allows you to end a code submission with an expression and no semicolon. This tells C# scripting to return the value of the expression, which is also the value of the code submission. In a notebook, each cell corresponds to a code submission. This is known as a trailing expression in C#. The notebook will display this as an "execute result" cell output. In Jupyter, this is indicated by the bracketed submission number indicator on the left.
A submission can only have a single return value, and a Jupyter cell can only have a single execute result. If you would like to produce more than one output from a single submission, you can use the display
method. In Jupyter, the display
method creates a "display data" output. You can see that this type of output doesn't have a corresponding submission number indicator to the left.
You can use display
multiple times in a single submission, and you can combine this with a trailing expression.
Display outputs can be updated in place, for example to show the progress of an operation. The display
method returns a DisplayedValue
object and by calling Update
you can replace what was displayed previously.
It's common to use Console.WriteLine
(or Console.Out.WriteLine
) in C# to write some information for display, so .NET Interactive captures output and redirects it to the notebook. It does the same for Console.Error
, with a different display style to indicate that it was an error.