代码之家  ›  专栏  ›  技术社区  ›  Sushant

为什么.Net中Exception类的ToString()方法不使用StringBuilder来构建字符串?[已关闭]

  •  2
  • Sushant  · 技术社区  · 8 年前

    我希望下面的代码(来自.Net框架中的Exception类)使用StringBuilder构建字符串,然后返回生成器。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;
    }
    
    1 回复  |  直到 8 年前
        1
  •  5
  •   Community ahmed    7 年前

    也就是说,值得记住的是 StringBuilder 过于简单 string 串联主要适用于循环场景,其中您有任意大的迭代次数。

    在上面的示例中,方法的主要部分应该最终调用 Concat() 方法,它应该能够更好地创建单个新 一串 对象,而不是使用 字符串拼接 .介绍 字符串拼接 对于其他串联,尤其是当它们不总是发生时(因为它们是有条件的),在常见场景中可能不是那么理想。

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