2013-04-17 11 views
5

Dare i seguenti esempi:String.Format dinamica a seconda delle params

string amountDisplay = presentation.Amount == 1 ? "" : String.Format("{0} x ", presentation.Amount); 

C'è comunque di utilizzare String.Format così formati a seconda sulle proprietà senza dover fare una condizione del 'valore' dei parametri ?

un altro caso d'uso:

String.Format("({0}) {1}-{2}", countryCode, areaCode, phonenumber); 

se ho solo phonenumber, avrei finito con qualcosa di simile "() -5.555.555" che non è desiderabile.

un altro caso d'uso:

String.Format("my {0} has {1} cat[s]", "Aunt", 3) 

in questo caso, vorrei includere le s in [] se il valore> 1, per esempio.

C'è una "sintassi" nera di String.Format che rimuove le parti del codice in base al valore dei parametri o null?

Grazie.

+0

Eventuali duplicati di http://stackoverflow.com/questions/154483/how-to-conditionally-format-a-string-in-net – mickfold

+1

Si può fare condizionali sui numeri che discrimina tra positivo, negativo e zero: http://msdn.microsoft.com/en-us/library/0c899ak8.aspx#SectionSeparator – eulerfx

+0

@eulerfx il tuo commento dovrebbe essere la risposta. È esattamente quello che stavo chiedendo qui, se c'è un modo per farlo e si dimostra perfettamente. Altre soluzioni sono ok ma sono hack, la tua è quella che chiamerei una vera risposta alla domanda. Sentiti libero di postarlo come risposta in modo che io possa sceglierli come quello giusto. –

risposta

0

Provare a utilizzare operatore condizionale:

string str = "my {0} has {1} cat" + ((value > 1) ? "s" : ""); 

str = String.Format(str, "Aunt", value); 
0

riguarda solo il secondo problema, ma:

int x = 3; 
String.Format("my {0} has {1} cat{2}", "Aunt", x, x > 1 ? "s" : ""); 
2
Non

davvero. Puoi hackerare alcune cose per il plurale, certo, ma non sarà una soluzione generica per tutti i casi d'uso.

È necessario verificare la validità dell'input indipendentemente. Se ti aspetti che areaCode non sia nullo, ed è un tipo nullable come string, esegui alcuni controlli all'inizio del tuo metodo. Ad esempio:

public string Foo(string countryCode, string areaCode, string phoneNumber) 
{ 
    if (string.IsNullOrEmpty(countryCode)) throw new ArgumentNullException("countryCode"); 
    if (string.IsNullOrEmpty(areaCode)) throw new ArgumentNullException("areaCode"); 
    if (string.IsNullOrEmpty(phoneNumber)) throw new ArgumentNullException("phoneNumber"); 

    return string.Format(......); 
} 

Non è compito dell'UI compensare qualche errore di convalida sull'input dell'utente. Se i dati sono errati o mancanti, non continuare. Ti causerà solo strani insetti e molto dolore lungo la strada.

1

Puoi anche provare il servizio PluralizationServices. Qualcosa di simile a questo:

using System.Data.Entity.Design.PluralizationServices; 

string str = "my {0} has {1} {3}"; 
PluralizationService ps = PluralizationService.CreateService(CultureInfo.GetCultureInfo("en-us")); 
str = String.Format(str, "Aunt", value, (value > 1) ? ps.Pluralize("cat") : "cat");