string.Format () podając „Ciąg wejściowy ma nieprawidłowy format”

115

Co tu robię źle?

string tmp = @"
    if (UseImageFiles) {
        vCalHeader += ""<td><img onmousedown='' src= '{0}cal_fastreverse.gif' width='13px' height='9' onmouseover='changeBorder(this, 0)' onmouseout='changeBorder(this, 1)' style='border:1px solid white'></td>\n""; //Year scroller (decrease 1 year)
        calHeight += 22;
    }";

string x = "xter";
tmp = string.Format(tmp, x);

dostaję

Ciąg wejściowy nie był w poprawnym formacie

kiedy próbujesz się zmienić {0}. Robię to w C # i WinForms.

Wyjątek formatu nie został obsłużony.
Ciąg wejściowy nie był w poprawnym formacie

Wskazówki dotyczące rozwiązywania problemów, które otrzymuję:

Upewnij się, że argumenty metody są w odpowiednim formacie. Podczas konwertowania ciągu na datetime, przeanalizuj ciąg, aby pobrać datę przed umieszczeniem każdej zmiennej w obiekcie DateTime.

Panie Rendezvous
źródło

Odpowiedzi:

303

string.Format()traktuje każdy znak „{” lub „}” jako część symbolu zastępczego (np. „{0}”, którego już używasz). Musisz uciec przed każdym dosłownym wystąpieniem, podwajając je.

Więc w twoim przypadku zrób:

 string tmp = @"
    if (UseImageFiles) {{
        ...
    }}";
Christian.K
źródło
4
Dziękuję Ci! Komunikat o błędzie „Ciąg wejściowy nie był w odpowiednim formacie” nie był dla mnie w ogóle pomocny. Myślałem, że jeden z moich parametrów jest zerowy czy coś.
styfle