2010-07-13 3 views
2

Что такое tersest способ преобразования целочисленного массива в строку, перечисляющую элементы inline? Я думаю что-то вроде анонимной функции, которая выполняет преобразование.Преобразование массива в строку inline

var array = new int[] { 1, 2 } 
var s = string.Format("{0}", 
         new [] 
         { /*inline transform array into the string "1, 2"*/ }); 

ответ

7

Использование string.Join. В .NET 3.5 и ранее вам нужно сначала преобразовать в строковый массив; в .NET 4 происходит перегрузка IEnumerable<T>. Поэтому в зависимости от версии:

.NET 2.0 или 3.0/C# 2:

string s = string.Join(", ", 
    Array.ConvertAll(delegate(int x) { return x.ToString(); }); 

.NET 2.0 или 3.0/C# 3:

string s = string.Join(", ", Array.ConvertAll(x => x.ToString()); 

.NET 3.5/C# 3:

string s = string.Join(", ", array.Select(x => x.ToString()).ToArray()); 

(или используйте версию, которая работает с .NET 2.0, если вы предпочитаете).

.NET 4:

string s = string.Join(", ", array); 

(я даже не видел, что до сегодняшнего дня!)

3

С string.join для .NET 4.0:

var s = String.Join(", ",array); 

это работает потому что String.Join теперь имеет перегрузку, которая принимает IEnumerable <T>,

Для 3.5 вы можете использовать

var s = String.Join(", ", array.Select(n => n.ToString()).ToArray()); 

Для предыдущих версий .NET см. Более подробный ответ Jon Skeets.

+0

@ Джон - Не был бы он использует 'Join (строка, IEnumerable )' overload? –

+0

+1 - Я не ожидал, что это сработает. Doh ... не видел 'IEnumerable ' overload (новый для .NET 4). –

+0

@Jon Спасибо, я отредактировал обратно к ответу orignal; после того, как я подтвердил это с помощью моего надежного компилятора :-) – driis

0

ReSharper дает мне что-то вроде:

public static string EnumerateToString(this int[] a, string separator) 
    { 
     return a.Aggregate("", (current, i) => current + i.ToString(separator)); 
    } 
+0

Это потенциально будет очень медленным, так как оно будет копировать строку на каждой итерации. В основном вы заканчиваете сложность O (n^2). –

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