我可以理解 string.Join( )

  var stringies1 =new [] {"Blood", "is", "Thicker", "Than", "Water" };
  var zoin = string.Join("|", stringies1);

它与扩展方法 Join() 有什么不同?

I mean stringies1.Join(IEnumerable<T Result......)

有帮助吗?

解决方案

您所指的扩展方法, Enumerable.Join 用于加入集合,这意味着您将它们并排放置并尝试将项目与项目匹配,从而产生结果。可以想象它就像将电话簿与您的聚会名称列表相匹配,找到列表中所有名称的电话号码。

所以,不,扩展方法Join不能用于将它们放在一个数组之后,并将它们组合成一个长数组。

但是,有一种替代方法,您可以使用扩展方法 Enumerable.Concat 在同一个班级。

此方法不对数组进行操作,而是对所有实现IEnumerable<T>的集合类型进行操作,因此也会生成另一个<=>作为结果。然后,您可以使用 Enumerable.ToArray 将此结果转换为数组。

因此,您将使用以下代码:

var stringies1 = new [] {"Blood", "is", "Thicker", "Than", "Water" };
var stringies2 = new [] { "and", "so", "is", "wine" };

var stringies3 = stringies1.Concat(stringies2).ToArray();
// stringies3 now contains "Blood", "is", ... and "and", "so", "is", ...

这假设您使用的是.NET 3.5,并在文件顶部的使用列表中包含以下内容:

using System.Linq;

另一方面,如果您(或其他人发现此答案)未使用.NET 3.5,则需要一些手动代码。这是一个简单的通用方法(假设.NET 2.0),可以帮助您:

public static T[] Concat<T>(T[] firstSource, T[] secondSource,
    params T[] restOfSources)
{
    // omitted validation of non-null arguments, etc.

    Int32 totalLength = firstSource.Length + secondSource.Length;
    foreach (T[] source in restOfSources)
        totalLength += source.Length;

    T[] result = new T[totalLength];
    Int32 currentIndex = 0;

    Array.Copy(firstSource, 0, result, currentIndex, firstSource.Length);
    currentIndex += firstSource.Length;

    Array.Copy(secondSource, 0, result, currentIndex, secondSource.Length);
    currentIndex += secondSource.Length;

    foreach (T[] source in restOfSources)
    {
        Array.Copy(source, 0, result, currentIndex, source.Length);
        currentIndex += source.Length;
    }

    return result;
}

可以这样使用:

var stringies1 = ...
var stringies2 = ...

var stringies3 = YourClass.Concat(stringies1, stringies2);

其他提示

我假设通过扩展方法,您指的是 Enumerable.Join 方法?这 string.Join IEnumerable.Join 是两种截然不同的方法:

  • string.Join 将获取一个字符串数组,使用一些分隔符将它们连接在一起,然后返回结果字符串。
  • Enumerable.Join 将以与 SQL 中的 JOIN 操作相同的方式作用于两个集合

相同功能的可读性方法不同,适当时代码较少。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top