【发布时间】:2018-03-09 23:55:23
【问题描述】:
我很惊讶list.Join() 返回System.Collections.Generic.List`1[System.String]
static void Main(string[] args)
{
var list = new List<string>();
list.Add("1024");
list.Add("2048");
Console.WriteLine(list.Join());
Console.WriteLine(string.Join(", ", list));
Console.ReadKey();
}
使用扩展方法作为
public static class StringExtensions
{
public static string Join(this IEnumerable list)
{
return string.Join(", ", list);
}
}
我不明白它不会返回我所期望的,在我认为的上下文中,我对string.join 和扩展方法非常熟悉。
我在内部认为它会是这样的
static string Join(IEnumerable list)
{
StringBuilder sb = new StringBuilder();
foreach (var item in list)
{
sb.Append(item).Append(", ");
}
return sb.ToString();
}
最后,我用这个版本,支持泛型和非泛型。
public static string Join(this IEnumerable list)
{
return Join(list.Cast<object>());
}
public static string Join<T>(this IEnumerable<T> list)
{
return string.Join(",", list);
}
【问题讨论】:
-
它没有绑定到this oveload,因为您的 IEnumerable 不是通用的。
-
您在
StringExtensions内的Join方法上使用System.Collections.IEnumerable而不是System.Collections.Generic.IEnumerable<T>。更改为public static string Join(this IEnumerable<string> list)并且它们都可以工作。 -
取一个通用的
IEnumerable<>或,当你调用string.Join时,将第二个参数改为list.Cast<object>()。
标签: c# string ienumerable extension-methods