2009-02-06 19 views

risposta

8

Lo sta trattando come Custom Numeric Format String. In particolare, vedere la parte relativa ai separatori di sezione nella pagina collegata:

Il ';' il carattere è usato per separare le sezioni per numeri positivi, negativi e zero nella stringa di formato. Se ci sono due sezioni nella stringa del formato personalizzato, la sezione più a sinistra definisce la formattazione dei numeri positivi e zero, mentre la sezione più a destra definisce la formattazione dei numeri negativi. Se ci sono tre sezioni, la sezione più a sinistra definisce la formattazione dei numeri positivi, la sezione centrale definisce la formattazione dei numeri negativi e la sezione più a destra definisce la formattazione dei numeri zero.

10

Dai un'occhiata a here e here, per la documentazione ufficiale. E questo fantastico cheatsheet dal blog di Jhon Sheehan!

+0

Più in particolare dal suddetto foglio: "; Separatore di sezione Il ';' il carattere è usato per separare le sezioni per i numeri positivi, negativi e zero nella stringa di formato. " –

+0

Il cheatheet di Jhon Sheehan è denaro! –

2

Sta utilizzando la stringa di formato letterale dalle stringhe di formato numerico personalizzate. Puoi fornire un letterale che mappa su numeri che sono numeri positivi, negativi o negativi. Il primo "sì" mappa in positivo, il secondo in negativo e il "no" in zeri. Quindi qualsiasi non zero è sì, e solo zero sono no. Questo è equivalente alle interpretazioni semantiche vero/falso standard su valori numerici.

Vedere sotto "separatore di sezione" della pagina stringhe Custom Numeric Format.

1

Come ha detto @Joel Coehoorn e @tvanfosson, sta utilizzando una stringa di formato numerico personalizzata. Il motivo per cui funziona è che un valore booleano è convertibile ad un doppio utilizzando il seguente (essenzialmente):

public static double ToDouble(bool value) 
{ 
    return (value ? ((double) 1) : ((double) 0)); 
} 

Quindi, se il valore è vero, restituisce 1 e se il valore è falso restituisce 0. A quel punto , le regole di mappatura delle sezioni si applicano come descritto da @tvanfosson (e successivamente da @Joel Coehoorn).

1

Steve-X ha la migliore documentazione per String.Format che ho visto finora: Steve-X ToString()

So che hai chiesto "ToString", ma ToString è dipendente per l'attuazione si sta chiamando (cioè DateTime .ToString(), decimal.ToString ... ecc.).

Se sei veramente interessato a come funziona, apri reflector e consulta il codice.

Problemi correlati