string.Concat,Mutable还是Immutable?

时间:2018-05-27 08:16:27

标签: c#

我知道字符串在C#中是不可变的,除非使用了StringBuilder类。情况是,我有一个ObjectResult(实现IEnumerable)的字符串,我想将它转换为一个单独的字符串对象。这里有两个选择:

  1. 使用string.Concat

    var myDesiredData = string.Concat(TheObjectResult)
    
  2. 使用StringBuilder

    var sb = new StringBuiler();
    foreach (var item in TheObjectResult)
    {
      sb.Append(item);
    }
    var myDesiredData = sb.ToString();
    
  3. 我不确定第一个选项是如何工作的。

1 个答案:

答案 0 :(得分:6)

两种选择几乎完全相同。这就是string.Concat(IEnumerable<string>)的实施方式:

[ComVisible(false)]
public static String Concat(IEnumerable<String> values) {
    if (values == null)
        throw new ArgumentNullException("values");
    Contract.Ensures(Contract.Result<String>() != null);
    Contract.EndContractBlock();

    StringBuilder result = StringBuilderCache.Acquire();
    using(IEnumerator<String> en = values.GetEnumerator()) {
        while (en.MoveNext()) {
            if (en.Current != null) {
                result.Append(en.Current);
            }
        }            
    }
    return StringBuilderCache.GetStringAndRelease(result);            
}

我会选择string.Concat,因为为什么要写一个已存在的方法。