C# 如何使用扩展方法Join()?

C# 如何使用扩展方法Join()?,c#,extension-methods,C#,Extension Methods,我能理解字符串。Join() 它与扩展方法Join()有何不同 我是说stringies1.加入(IEnumerable您所指的扩展方法是用于加入集合,这意味着您将集合并排放置,并尝试将项目与项目进行匹配,从而产生结果。可以将其视为将电话簿与您的派对名单进行匹配,以查找列表中所有姓名的电话号码 因此,不可以,扩展方法Join不能用于将它们依次放置在一个数组中,并将它们组合到一个长数组中 但是,还有一种替代方法,您可以在同一个类中使用扩展方法 此方法不仅对数组进行操作,而且对实现IEnumerab

我能理解字符串。Join()

它与扩展方法Join()有何不同


我是说stringies1.加入(IEnumerable您所指的扩展方法是用于加入集合,这意味着您将集合并排放置,并尝试将项目与项目进行匹配,从而产生结果。可以将其视为将电话簿与您的派对名单进行匹配,以查找列表中所有姓名的电话号码

因此,不可以,扩展方法Join不能用于将它们依次放置在一个数组中,并将它们组合到一个长数组中

但是,还有一种替代方法,您可以在同一个类中使用扩展方法

此方法不仅对数组进行操作,而且对实现
IEnumerable
的所有集合类型进行操作,因此还将生成另一个
IEnumerable
作为其结果。然后,可以使用将此结果转换为数组

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

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;
}

相同的函数具有不同的可读性,适当时代码更少。

我假设通过扩展方法,您指的是
可枚举.Join
方法
字符串.Join
一个IEnumerable.Join是两种截然不同的方法:

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

请向我解释扩展方法Join()的用法请接受我让你困惑的申请。我确实想要Fredrik解释的答案。我很惊讶你能立即做出反应,并有兴趣向其他人解释这些事情。无论如何,你所追求的是将两个数组/集合连接起来,然后根据结果生成一个数组。当然,你说的是正确的。不是吗是否可以清除(删除)帖子中的所有命中条目?谢谢。谢谢。谢谢。:)对不起,我需要String.Join()和stringies1.Join()之间的区别(实例和扩展方法)是的,这是我需要的。谢谢你,伙计。我把拉塞弄糊涂了,否则他会给我我想要的东西。所以,如果你允许,我会按照预期的答案投票给他的条目。@udana:你就这样做吧。没问题:o)但它们不是同一个函数。一个用于字符串,另一个用于两个集合。
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);