2012-04-27 19 views
9

Próbowałem podejmowania ciąg tak:string.Format z string.join

[1][2][3][4][5][6][7][8][9][10] 

Z tym kodem:

string nums = "[" + string.Join("][", Enumerable.Range(1, 10)) + "]"; 

To jednak naprawdę nie wyglądają bardzo dobrze, więc ja zastanawiałem się, czy mogę połączyć string.Format z string.join, jakoś tak:

string num = string.Join("[{0}]", Enumerable.Range(1, 10)); 

tak, że otacza coś wokół każdego elementu, który jednak kończy się tak:

1[{0}]2[{0}]3[{0}]4[{0}]5[{0}]6[{0}]7[{0}]8[{0}]9[{0}]10 

Czy istnieje lepszy/łatwiejszy sposób to zrobić?

Edytuj: Dzięki chłopaki za wszystkie rozwiązania. Muszę powiedzieć, że wolę ten

string s = string.Concat(Enumerable.Range(1, 4).Select(i => string.Format("SomeTitle: >>> {0} <<<\n", i))); 

Przez ten

string s2 = "SomeTitle: >>>" + string.Join("<<<\nSomeTitle: >>>", Enumerable.Range(1, 4)) + "<<<\n"; 

Ponieważ wszystkie formatowanie odbywa się w jeden ciąg, a nie w wielokrotności.

+1

dlaczego twoje poprzednie rozwiązanie nie jest dobre - wygląda idealnie dla mnie! :) –

Odpowiedz

19
string.Concat(Enumerable.Range(1,10).Select(i => string.Format("[{0}]", i))) 
+3

Tylko jedna uwaga: działa to tylko w frameworku> = 4. W starszych wersjach należy włączyć argument Concat do tablicy, na przykład dodając '.ToArray()' – digEmAll

1

Prawdopodobnie szuka rozwiązania LINQ takich jak

string nums = String.Concat(Enumerable.Range(1, 10) 
             .Select(i => string.Format("[{0}]", i))) 

przeprosiny za formatowania okropna.

Edytuj:Zastąpiono z String.Concat po przypomnieniu odpowiedzi spenders.

1

bym tylko łączyć poszczególne elementy i używać String.Concat umieścić je razem:

string num = 
    String.Concat(
    Enumerable.Range(1, 10).Select(n => "[" + n + "]") 
); 

Jeśli chcesz uzyskać fantazyjny, można dokonać krzyż dołączyć pomiędzy liczbami i tablicy ciągów . :)

string num = 
    String.Concat(
    from n in Enumerable.Range(1, 10) 
    from s in new string[] { "[", null, "]" } 
    select s ?? n.ToString() 
); 
1
StringBuilder str = new StringBuilder(); 
for (int i = 1; i <= 10; i++) 
str.AppendFormat("[{0}]", i); 

Console.WriteLine(str.ToString()); 

Moja rada jest taka, aby użyć StringBuilder dołączyć samego wzorca.

11

Późna odpowiedź: chciałem czegoś takiego, ale z możliwością wprowadzenia ciągu formatów i separatora. Więc to, co wymyśliłem:

public static string JoinFormat<T>(this IEnumerable<T> list, string separator, 
            string formatString) 
{ 
    formatString = string.IsNullOrWhiteSpace(formatString) ? "{0}": formatString; 
    return string.Join(separator, 
         list.Select(item => string.Format(formatString, item))); 
} 

Teraz można zrobić listę jak

[1], [2], [3], [4], [5], [ 6], [7], [8], [9], [10]

wprowadzając numbers.JoinFormat(", ", "[{0}]").

Podczas gdy rozwiązanie Concat z "[{0}],") będzie mieć przecinek końcowy.

Pusta lub separator null tworzy twoją listę.