编写 IEnumerable 扩展方法来连接字符串集合

1 c# string ienumerable extension-methods

我对 C# 还很陌生,我正在尝试编写一个扩展方法来使用自定义引号连接对象/字符串的集合。我有两种实现它的方法,试图找出哪种方法是标准方法。

第一种方法,为我需要的每种类型定义一个方法:

public static string JoinToString(this IEnumerable<string> stringEnumerable, string delimiter = ",", char quote = '\'');
{
    return string.Join(delimiter, stringEnumerable.Select(item => quote + item + quote));
}
Run Code Online (Sandbox Code Playgroud)
public static string JoinToString(this IEnumerable<int> intEnumerable, string delimiter = ",", char quote = '\'')
{
    return string.Join(delimiter, intEnumerable.Select(item => quote + item.ToString() + quote));
}
Run Code Online (Sandbox Code Playgroud)

ETC...


第二种方法:仅定义对象参数,因此它可以与任何类型一起使用(就像 Console.WriteLine(object) 一样)

public static string JoinToString(this IEnumerable<object> enumerable, string delimiter = ",", char quote = '\'')
{
    return string.Join(delimiter, enumerable.Select(item => quote + item.ToString() + quote));
}
Run Code Online (Sandbox Code Playgroud)

哪一种是普遍接受/标准的方法?谢谢!

Min*_*ipe 5

使用 Linq/扩展方法时的常见/标准方法是使用泛型,除非您有理由不这样做。所以

public static string JoinToString<T>(this IEnumerable<T> source, string delimiter = ",", char quote = '\'')
{
    return string.Join(delimiter, source.Select(item => $"{quote}{item}{quote}"));
}
Run Code Online (Sandbox Code Playgroud)

为了将来参考,如果您想限制泛型类型参数,则还可以对其应用约束,以便只有一组特定类型可以传递给泛型方法,这在您想要访问对象上的属性或方法时非常方便