gpt4 book ai didi

c# - 带有 String.Join 的 IEnumerable 扩展方法返回 System.Collections.Generic.List`1[System.String]

转载 作者:行者123 更新时间:2023-11-30 14:47:10 24 4
gpt4 key购买 nike

令我惊讶的是 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);
}

最佳答案

原因是:扩展方法强制转换泛型 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>());
}

关于c# - 带有 String.Join 的 IEnumerable 扩展方法返回 System.Collections.Generic.List`1[System.String],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46465748/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com