String.Join returns System.Collections.Generic.List`1[System.String] 的 IEnumerable 扩展方法
IEnumerable extension method with String.Join returns System.Collections.Generic.List`1[System.String]
我很惊讶 list.Join()
returns 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);
}
}
我不明白它不 return 我所期望的,在我 认为 我很熟悉的上下文中 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);
}
原因是:扩展方法将泛型 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>());
}
我很惊讶 list.Join()
returns 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);
}
}
我不明白它不 return 我所期望的,在我 认为 我很熟悉的上下文中 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);
}
原因是:扩展方法将泛型 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>());
}