Как использовать метод расширения Join ()? - PullRequest
3 голосов
/ 22 октября 2009

Я могу понять строку. Джоин ()

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

Чем он отличается от метода расширения Join ()?

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

Ответы [ 3 ]

3 голосов
/ 22 октября 2009

Я предполагаю, что методом расширения вы ссылаетесь на метод Enumerable.Join? string.Join a IEnumerable.Join - это два довольно разных метода:

  • string.Join возьмет массив строк, соединит их вместе, используя некоторый разделитель, и вернет полученную строку.
  • Enumerable.Join будет работать с двумя коллекциями почти так же, как операция JOIN в SQL
1 голос
/ 22 октября 2009

Метод расширения, на который вы ссылаетесь, Enumerable.Join предназначен для объединения коллекций, что означает, что вы размещаете их рядом и пытаетесь сопоставить элементы с элементами, что дает результаты. Думайте об этом, как о сопоставлении телефонной книги с вашим списком имен для вечеринки, чтобы найти номер телефона для всех имен, которые есть в вашем списке.

Итак, нет, метод расширения Join нельзя использовать для размещения их один массив за другим и объединения их в один длинный массив.

Существует альтернатива, однако, вы можете использовать метод расширения Enumerable.Concat в том же классе.

Этот метод работает не только с массивами /, но и со всеми типами коллекций, которые реализуют IEnumerable<T>, и, таким образом, в результате также получится еще один 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);
0 голосов
/ 22 октября 2009

Та же функция отличается подходом для удобочитаемости и меньшим количеством кода при необходимости.

...