2012-09-25 19 views
8

A volte desidero unire due stringhe con uno spazio intermedio. Ma se la seconda stringa è nulla, non voglio lo spazio.Aggiungi a stringa se stringa non vuota

Prendere in considerazione la seguente codice:

void AssertFoo(bool cond, string message = null) { 
    ... 
    Assert.Fail("Something is foo.{0}", message != null ? " " + message : ""); 
    ... 
} 

C'è un modo più elegante per farlo?

risposta

24

Ecco un'opzione che mi piace. È meglio se hai già uno IEnumerable<string> con i tuoi dati, ma è abbastanza facile anche se non lo fai. Inoltre, si adatta chiaramente alle stringhe in entrata, non solo 1 o 2.

string[] myStrings = new string[]{"Hello", "World", null}; 
string result = string.Join(" ", myStrings.Where(str => !string.IsNullOrEmpty(str))); 

Ecco un'altra opzione. È un po 'più breve per questo un caso, ma è più brutto, più difficile da leggere, e non come estendibile, quindi vorrei probabilmente evitare personalmente:

//note space added before {0} 
Assert.Fail("Something is foo. {0}", message ?? "\b"); 

In questo caso si aggiunge lo spazio per la stringa di formato in sé, ma se message è null, utilizziamo invece il carattere backspace per rimuovere lo spazio che conosciamo prima del messaggio.

+0

ho ritenuto che. Mi piacerebbe avere un'opzione per usare {0}, {1}, {2} se necessario. Inoltre non è più leggibile di quello che ho già. –

0

Prova questa:

string joinedString = string.IsNullOrEmpty(message2) ? message1 : message1 + " " + message2; 
-5

Il modo più elegante è quello di utilizzare la parola chiave integrato della classe String.

String.IsNullOrEmpty 

In questo modo non avrete problemi.

+2

Questo non risponde alla domanda. – stephen

1
Assert.Fail("Something is foo.{0}", (" " + message).TrimEnd()); 

Certo, questo si tradurrà in un paio di creazioni oggetto stringa, ma è questioni di micro-ottimizzazione improbabili sarebbe un problema nella maggior parte dei programmi. Potrebbe essere considerato un vantaggio di questo metodo che gestisce non solo un messaggio nullo, ma anche un messaggio di tutti gli spazi bianchi.

0

Per le versioni più recenti di C# è possibile utilizzare il seguente metodo di estensione:

public static string Prepend(this string value, string prepend) => prepend + value; 

Può essere utilizzato in questo modo:

Assert.Fail("Something is foo.{0}", message?.Prepend(" "));