日期:2014-05-17  浏览次数:20481 次

最近有一个疑惑是关于 String 与 StringBuilder 的
用 StringBuilder 的同时
又用加String结束来结束。


这样做的原因主要是让代码看起来短点,囧。。。

例如:


        public String ReturnStr(IList<Model> list)
        {
            StringBuilder sb = new StringBuilder();

            sb.Append("[");

            foreach (var model in list)
            {
                sb.Append(model.Name);
            }

            return sb + "]";
        }


我的疑惑是,最后的 sb + "]" 和 ToString() 
比起来,谁更划算呢?


------解决方案--------------------
return sb + "]"是运算符+重载,会调用string.Concat(object,object);

个人感觉:sb.Append("]");return sb.ToString();在sb里东西比较多的情况下,可能效率稍高些。
------解决方案--------------------
如果你多看点深度的.net framework代码,也许会有新的发现:
[__DynamicallyInvokable]
public static string Concat(params object[] args)
{
    if (args == null)
    {
        throw new ArgumentNullException("args");
    }
    string[] values = new string[args.Length];
    int totalLength = 0;
    for (int i = 0; i < args.Length; i++)
    {
        object obj2 = args[i];
        values[i] = (obj2 == null) ? Empty : obj2.ToString();
        if (values[i] == null)
        {
            values[i] = Empty;
        }
        totalLength += values[i].Length;
        if (totalLength < 0)
        {
            throw new OutOfMemoryException();
        }
    }
    return ConcatArray(values, totalLength);
}

你觉得运行这个“劳什子”的代码,跟一个简单得 ToString() 相比,哪一个更有意义?

许多时候,“太专业”是一个贬义词!
------解决方案--------------------
引用:
return sb + "]"是运算符+重载,会调用string.Concat(object,object);

个人感觉:sb.Append("]");return sb.ToString();在sb里东西比较多的情况下,可能效率稍高些。