gpt4 book ai didi

c# - 为什么.Net中Exception类的ToString()方法不使用StringBuilder来构建字符串?

转载 作者:行者123 更新时间:2023-12-03 02:49:28 26 4
gpt4 key购买 nike

我希望下面的代码(来自 .Net 框架中的 Exception 类)使用 StringBuilder 构建字符串,然后返回 builder.ToString() 而不是在现有字符串上使用“+”运算符,这最终每次都会创建一个新字符串。

我希望编写 .Net 源代码的人尽可能遵循最佳实践,因此我想仔细检查这是否仍然是最佳的

private String ToString(bool needFileLineInfo, bool needMessage) {
String message = (needMessage ? Message : null);
String s;
if (message == null || message.Length <= 0) {
s = GetClassName();
}
else {
s = GetClassName() + ": " + message;
}

if (_innerException!=null) {
s = s + " ---> " + _innerException.ToString(needFileLineInfo, needMessage)
+ Environment.NewLine
+ " "
+ Environment.GetResourceString("Exception_EndOfInnerExceptionStack");

}

string stackTrace = GetStackTrace(needFileLineInfo);
if (stackTrace != null)
{
s += Environment.NewLine + stackTrace;
}

return s;
}

最佳答案

如果不询问代码作者,就不可能确切地知道代码作者为什么选择此实现。

也就是说,值得记住的是,优先使用 StringBuilder 而不是简单的 string 连接的一般指南主要适用于具有任意大迭代计数的循环场景。

在上面的示例中,该方法的主要部分应该最终调用 Concat() 方法,该方法应该可以更好地创建单个新字符串从输入中获取对象,而不是使用 StringBuilder 迭代地附加每个部分。为其他连接引入 StringBuilder,尤其是当它们并不总是会发生时(因为它们是有条件的),在常见场景中很可能不太理想。

参见例如String concatenation vs String Builder. Performance ,其中特别指出了这种差异。

关于c# - 为什么.Net中Exception类的ToString()方法不使用StringBuilder来构建字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38965514/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com