连接对象的字符串表示的好方法?

Eri*_*ndi 2 c# optimization extension-methods memory-management

好,

我们的代码中有很多where子句.我们只是尽可能多的方式来产生一个字符串来表示条件.我试图想出一个干净的方式如下:

public static string Join<T>(this IEnumerable<T> items, string separator)
{
    var strings = from item in items select item.ToString();
    return string.Join(separator, strings.ToArray());
}
Run Code Online (Sandbox Code Playgroud)

它可以使用如下:

var values = new []{1, 2, 3, 4, 5, 6};
values.StringJoin(",");
// result should be:
// "1,2,3,4,5,6"
Run Code Online (Sandbox Code Playgroud)

所以这是一个很好的扩展方法,可以完成一项非常基础的工作.我知道简单的代码并不总是变成快速或有效的执行,但我只是好奇我能用这个简单的代码错过了什么.我们团队的其他成员争辩说:

  • 它不够灵活(无法控制字符串表示)
  • 可能没有内存效率
  • 可能不会很快

任何专家都会加入?

问候,

埃里克.

Lee*_*Lee 5

关于第一个问题,您可以添加另一个'formatter'参数来控制每个项目转换为字符串:

public static string Join<T>(this IEnumerable<T> items, string separator)
{
    return items.Join(separator, i => i.ToString());
}

public static string Join<T>(this IEnumerable<T> items, string separator, Func<T, string> formatter)
{
    return String.Join(separator, items.Select(i => formatter(i)).ToArray());
}
Run Code Online (Sandbox Code Playgroud)

关于后两个问题,我不担心它,除非你后来遇到性能问题并发现它是一个问题.然而,它不太可能成为瓶颈......