我有以下几行代码,并查找了Microsoft文档中的方法和对象定义,但我仍然不明白它是如何工作的。
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace HelloWorld.Tests
{
[TestClass]
public class WhenProgramRuns
{
private string _consoleOutput;
[TestInitialize]
public void Initialize()
{
var w = new System.IO.StringWriter();
Console.SetOut(w);
Program.Main(new string[0]);
_consoleOutput = w.GetStringBuilder().ToString().Trim();
}
[TestMethod]
public void SayHelloWorld()
{
Assert.AreEqual("Hello, World", _consoleOutput);
}
}
}
我不明白" w"将捕获Main的执行结果以及代码作者在调用Main时传递字符串[0]的原因。
这是Main:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HelloWorld
{
public class Program
{
public static void Main(string[] args)
{
Console.WriteLine("Hello, World");
}
}
}
答案 0 :(得分:2)
好吧,让我们把它分成几块:
我不明白" w"将捕获执行结果 主要
从技术上讲,它不正确表示它会捕获执行结果。我们的w
是StringWriter
的一个实例。
StringWriter
实现了TextWriter
,用于将信息写入字符串。
控制台将使用此w
实例来编写输出数据。
以及代码作者在调用Main
时传递字符串[0]的原因
方法main接受string[]
作为参数,所以为了调用它,我们必须传递一些东西,因为我们以后真的不需要这个参数,所以传递一个空数组就没问题了。
执行逻辑可以描述为:
StringWriter
。StringWriter
输出数据string[]
GetStringBuilder()
上的StringWriter
获取构建器,并通过调用ToString()
来构建生成的字符串答案 1 :(得分:0)
Console.SetOut函数将控制台的标准输出重定向到“w”。