我很惊讶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);
}
答案 0 :(得分:5)
原因是:扩展方法将通用List<string>
/ IEnumerable<string>
转换为非通用IEnumerable
。
因此,您将在此处使用单个对象调用this params
overload of string.Join
:
public static string Join(this IEnumerable list)
{
return string.Join(", ", list);
}
由于对象是List<string>
而未覆盖ToString
,因此您将获得结果的类型名称:System.Collections.Generic.List1[System.String]
您可以通过以下方式更改扩展程序:
public static string Join(this IEnumerable list)
{
return string.Join(", ", list.Cast<object>());
}