2009-10-22 4 views
3

Я могу понять string.join()Как использовать метод расширения Join()?

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

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

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

+0

К сожалению мне нужно разностное между string.join() и stringies1.Join() (экземпляр и расширение метода) – udana

ответ

1

Метод расширения вы имеете в виду, 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

Пожалуйста, объясните мне, как использовать метод расширения. Присоединиться() – udana

+0

Примите мои агитации за то, что вы меня смутили. Мне очень хочется ответить на то, что объяснил Фредрик. Удивительно, что вы немедленно ответили и заинтересовались объяснением вещей другим. – udana

+0

В любом случае, это Concat, для которого вы конкатенируете два массива/коллекции и ToArray для создания массива из результатов. –

-1

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

+0

Но они не те же функции. Один работает со струнами, а другой работает с двумя коллекциями. – Peter

3

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

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

Да, это то, что мне нужно. Спасибо. – udana

+0

Я смутил Лассе, иначе он дал бы мне точные вещи, которые я хочу. Так что с вашего разрешения я проголосую за его запись как ожидаемый ответ. – udana

+0

@udana: Ты просто продолжай и делай это. Без проблем) –

Смежные вопросы