2009-12-03 11 views
36

È possibile specificare un tipo di flag o modificatore su un parametro di formato stringa per renderlo in minuscolo o maiuscolo?Flag di formato stringa C# o modificatore per il parametro in minuscolo

Esempio di ciò che voglio:

String.Format("Hi {0:touppercase}, you have {1} {2:tolowercase}.", "John", 6, "Apples"); 

uscita Ricercato:

Ciao John, si dispone di 6 mele.

PS: Sì, so che posso modificare il caso del parametro prima di utilizzarlo nel formato stringa, ma non lo voglio.

+4

So che non lo vuoi, ma non riesco a capire perché basta chiamare .tolower() o .toupper() sulla stringa params è un problema. – tjmoore

+5

"Non riesco a capire perché chiamare semplicemente .tolower() o .toupper() sulla stringa params sia un problema" - ad esempio, l'associazione dei dati. – Joe

+0

Ho la stessa situazione. La ragione .ToLower() non funzionerà per me è che la stringa di formattazione proviene da un database (cioè, è configurabile dall'utente finale). – Ryan

risposta

55

C'è solo padding e allineamento formando ... Quindi il modo semplice è come hai detto, usa "John".ToUpper() o "John".ToLower().

Un'altra soluzione potrebbe essere creare un numero personalizzato IFormatProvider, per fornire il formato di stringa desiderato.

Ecco come apparirà lo IFormatProvider e la chiamata string.Format.

public class CustomStringFormat : IFormatProvider, ICustomFormatter 
{ 
    public object GetFormat(Type formatType) 
    { 
     if (formatType == typeof(ICustomFormatter)) 
      return this; 
     else 
      return null; 

    } 

    public string Format(string format, object arg, IFormatProvider formatProvider) 
    { 
     string result = arg.ToString(); 

     switch (format.ToUpper()) 
     { 
      case "U": return result.ToUpper(); 
      case "L": return result.ToLower(); 
      //more custom formats 
      default: return result; 
     } 
    } 
} 

e la chiamata sarà simile:

String.Format(new CustomStringFormat(), "Hi {0:U}", "John"); 
+1

Esiste un modo per farlo all'interno dei confini di un DisplayFormatAttribute? – howcheng

+0

Se il formato non è specificato ci sarà 'NullReferenceException', quindi dovrebbe essere aggiunta la condizione di controllo nullo nel metodo' Format() '. – gabr

6

In breve, no; AFAIK dovresti correggere i valori di origine o utilizzare la tua sostituzione a string.Format. Tieni presente che se stai trasmettendo una cultura personalizzata (a string.Format) potresti voler utilizzare culture.TextInfo.ToLower(s) anziché s.ToLower().

+0

Stavo solo per suggerire di scrivere il proprio formattatore di stringhe. – ChrisF

+0

Infatti, probabilmente potresti * avviare * qui: http://stackoverflow.com/questions/1322037#1322103, ma molto altro da fare ... –

Problemi correlati