2013-04-17 2 views
5

die folgenden Beispiele geben:dynamische String.Format von params je

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

ist es trotzdem String.Format zu verwenden, so dass es auf die jeweiligen Eigenschaften Formate ohne einen Zustand des ‚Wert‘ zu tun zu haben, der Parameter ?

ein weiterer Anwendungsfall:

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

wenn ich nur Telefonnummer habe ich am Ende mit etwas würde wie „() -5555555“ was nicht erwünscht ist.

ein weiterer Anwendungsfall:

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

in diesem Fall möchte ich die s in den [], wenn der Wert> 1 beispielsweise schließen.

Gibt es eine schwarze 'Syntax' von String.Format, die Code-Teile abhängig vom Wert der Parameter oder null entfernt?

Danke.

+0

Mögliche Duplikat http://stackoverflow.com/questions/154483/how-to-conditionally-format-a-string-in-net – mickfold

+1

Sie conditionals auf Zahlen tun können, die zwischen diskriminiert positiv, negativ und null - http://msdn.microsoft.com/en-us/library/0c899ak8.aspx#SectionSeparator – eulerfx

+0

@eulerfx Ihr Kommentar sollte die Antwort sein. Es ist genau das, was ich hier gefragt habe, ob es einen Weg gibt, es zu tun, und Sie beweisen es perfekt. Andere Lösungen sind in Ordnung, aber Hacks, Ihre ist, was ich eine echte Antwort auf die Frage nennen würde. Fühlen Sie sich frei, es als Antwort zu posten, damit ich sie als die richtige wählen kann. –

Antwort

0

Try bedingten Operator:

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

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

Nur das zweite Problem, aber:

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

wirklich nicht. Sie können zwar einige Dinge für den Plural [s] hacken, aber es wird keine generische Lösung sein, die all Ihren Anwendungsfällen entspricht.

Sie sollten die Gültigkeit Ihrer Eingabe unabhängig prüfen. Wenn Sie erwarten, dass areaCode nicht null ist und ein NULL-fähiger Typ wie string ist, führen Sie am Anfang der Methode einige Überprüfungen durch. Beispiel:

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(......); 
} 

Es ist nicht die Aufgabe der Benutzeroberfläche, einen Validierungsfehler bei der Benutzereingabe zu kompensieren. Wenn die Daten falsch sind oder fehlen, fahren Sie nicht fort. Es verursacht nur seltsame Insekten und viele Schmerzen auf der Straße.

1

Sie können auch PluralizationServices-Dienst versuchen. Etwas wie folgt aus:

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");