[英]What does ----s mean in the context of StringBuilder.ToString()?
[英]What is the difference between implicit and explicit StringBuilder.ToString() method calls?
我刚刚编写了一个小型单元测试,其中使用了StringBuilder()
。
var stringBuilder = new StringBuilder();
stringBuilder.Append("Foo");
Assert.AreEqual(stringBuilder, "Foo");
此测试将失败。
Expected: <Foo>
But was: "Foo"
但是,如果我将 Assert 更改为
Assert.AreEqual(stringBuilder.ToString(), "Foo");
测试将通过。
那么, ToString()
方法的隐式调用和显式调用有什么区别呢? 或者/这些括号( <>
)代表什么?
在您的第一个示例中,您正在测试StringBuilder
实例是否等于字符串,这将失败。
在您的第二个中,您正在测试调用ToString()
(它是一个字符串)的结果是否等于另一个字符串。
括号 (<>) 是 NUnit 的方式,用于指示它获得了一个非字符串对象,但为了显示消息,NUnit 对该对象调用ToString()
。
Expected: <Foo> But was: "Foo"
所以<Foo>
是一个在调用ToString()
返回Foo
的对象,而"Foo"
只是一个String
Foo 。
MSTest 会向您显示不同的消息,这会更清楚:
Expected:<Foo (System.Text.StringBuilder)>. Actual:<Foo (System.String)>.
在第一个版本中,没有对 ToString 的隐式调用这只会发生在像 Console.WriteLine 这样的方法中。
因此,实际发生的是您将 stringbuilder 对象等同于 string 对象。 即使类型不匹配:-)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.