C# `List().Join()`上的`Join()`方法用于什么?

C# `List().Join()`上的`Join()`方法用于什么?,c#,arrays,C#,Arrays,我遇到了这个 List().Join() 我在想 如何使用上述代码行中的Join()部分(在列表的右侧) 这看起来类似于以下内容: String.Join() …但它有一个更复杂的IntelliSense工具提示,如下所示: 在.NET中没有一个实例或扩展方法可以像String.join那样将字符串序列连接在一起。如果你想要这样的扩展方法,你必须自己编写(这应该很简单,因为它只需要在内部调用String.join) Enumerable.Join,这是您在IEnumerable上看到的方法,

我遇到了这个

List().Join()
我在想

如何使用上述代码行中的
Join()
部分(在
列表的右侧)

这看起来类似于以下内容:

String.Join()
…但它有一个更复杂的IntelliSense工具提示,如下所示:


在.NET中没有一个实例或扩展方法可以像
String.join那样将字符串序列连接在一起。如果你想要这样的扩展方法,你必须自己编写(这应该很简单,因为它只需要在内部调用
String.join


Enumerable.Join
,这是您在
IEnumerable
上看到的方法,它在集合上下文中引用联接,就像SQL所做的一样,是一种非常不同的操作。

这样做,现在您就拥有了所需的语法

public static class ExtensionMethods 
{
    public static string Join(this IEnumerable<string> stringarray, string separator) 
    {
        return String.Join(separator, stringarray);
    }
}
公共静态类扩展方法
{
公共静态字符串联接(此IEnumerable stringarray,字符串分隔符)
{
返回String.Join(分隔符,stringarray);
}
}

Join
是类
String
的常规静态方法。您想要使用的语法只能与扩展方法一起使用。如果您确实坚持这样使用它,只需创建自己的:

public static class MyExtensions
{
    public static string Join(this IEnumerable<string> enumeration, string separator)
       => string.Join(separator, enumeration);
}
公共静态类MyExtensions
{
公共静态字符串联接(此IEnumerable枚举,字符串分隔符)
=>string.Join(分隔符、枚举);
}

问题在于
myList
是一个字符串的列表。连接函数是一个非常特定于字符串的函数。因为列表不会对列表中的内容做出任何假设(您可以存储整数、浮点数、用户定义的类等)一个列表包含一个只针对字符串的函数是没有任何意义的


这就是为什么列表没有myList.Join的原因,因为列表中可能有任何内容。不幸的是,您必须坚持使用
String.Join()
,因为它是不合理的。

您可以像这样使用IEnumerable.Aggregate

list.Aggregate((i, j) => i + j);
但是string.join是性能的首选方法。
不要试图发明自定义语法。其他C#dev会失去可读性。顺便说一句,扩展方法是可行的。

为什么不能只使用
String.Join(“,myList”);
?为什么必须使用类似
myList.Join(”)的东西;
?FWIW您看到的intellisense是用于组合两个集合的Linq
Join
扩展方法,这与
string.Join
@rory.ap非常不同。如果您注意到我提到我知道如何以另一种方式执行此操作,我想知道如何使用扩展,因为它可以从枚举中获得谢谢你。这实际上澄清了为什么会这样(投票通过)我注释掉了对LINQ的引用,扩展就消失了。我不确定为什么会有否决票,因为我真的没有任何可以“谷歌”的东西表明这是LINQ的一部分,而我一开始并不知道它是LINQ的一部分。乍一看,它看起来像是一个复杂的常规连接方法,因为它接受了
字节[]
作为它的第一个参数,我真的很好奇如何使用它,因为它就在那里。我不是必须使用它,只是为了知道。没有办法使用它吗?本质上,我是在寻找一个基于可见扩展的如何使用它的示例。@SamuelJackson
可枚举的。Join
方法ha这与此无关。这是一个概念上完全不同的操作。如果您想用提供的分隔符连接字符串序列,
string.Join
正是要使用的方法,并且它不是
IEnumerable
的扩展,因此如果您想这样做,您需要自己创建它。同样,它是一个非常简单的方法很容易编写代码,但您必须编写它。D Stanley清除了多余的
Join
命令的来源。现在更有意义了。如果您希望将其添加到您的答案中,使其更完整,我可以接受此解决方案。其他解决方案作为扩展方法解决方案(对来这里的其他人很有用),但这不是我想要的。我看到了Join扩展,很好奇它是否可以这样使用。知道它是LINQ,如果我愿意,我马上知道如何使用它:)这并没有提供分隔符,如果序列中没有项目,它就会中断,而且性能也会显著下降,因为它最终会创建n-1个中间字符串,执行大量完全不必要的字符串数据副本,浪费大量CPU时间和内存。您失去的不仅仅是可读性。正如我所说,string.join是首选方法,我对perfs有明确的说明……可读性部分是对无用扩展方法的警告。请参阅我的问题修改,以了解我所寻找的内容中的澄清。这几乎是一个“告诉我如何使用它,或者它用于什么”类型的问题。确实没有任何阅读虽然你的建议很有创意,但它是另一种解决方案:)(而且是破碎的,但是要跳出框框思考!!)@Guillaume所以如果你知道它在所有可能的方面都是次品,为什么还要提出它呢?如果你这样做的话,你可能会有人实际使用它的风险。因为问题也是关于linq扩展的,理解它能够在没有字符串的情况下在另一个上下文中使用它可能会很有趣。我考虑过这一点,但这不是我想要的。我对右侧的特定
.Join
命令很好奇,是否可以使用它。现在我知道这是Linq的一部分,因此我天生就知道如何使用它(如果我愿意的话)。好奇心满足了!(投赞成票的tho)我在考虑这个,但这不是我想要的。我对t很好奇