2009-02-06 11 views

Respuesta

8

Lo está tratando como Custom Numeric Format String. Específicamente, vea la parte sobre los separadores de sección en la página vinculada:

The ';' el carácter se usa para separar las secciones de los números positivos, negativos y cero en la cadena de formato. Si hay dos secciones en la cadena de formato personalizado, la sección de la izquierda define el formato de los números positivos y cero, mientras que la sección de la derecha define el formato de los números negativos. Si hay tres secciones, la sección de la izquierda define el formato de los números positivos, la sección de en medio define el formato de los números negativos, y la sección de la derecha define el formato de los números cero.

10

Echa un vistazo a here y here, para documentación oficial. ¡Y este gran cheatsheet del blog de Jhon Sheehan!

+0

Más específicamente de la hoja de referencia mencionada: "; Separador de sección El ';' el carácter se usa para separar las secciones de los números positivos, negativos y cero en la cadena de formato. " –

+0

La trampa de Jhon Sheehan es dinero! –

2

Está utilizando la cadena de formato literal de las cadenas de formato numérico personalizadas. Puede suministrar un literal que se mapea en numbes que son números positivos, negativos o cero. El primer "sí" se asigna a positivo, el segundo a negativo y el "no" a ceros. Por lo tanto, cualquier valor distinto de cero es sí, y solo los ceros son no. Esto es equivalente a interpretaciones semánticas verdaderas/falsas estándar en valores numéricos.

Busque en "separador de sección" de la página de cadenas Custom Numeric Format.

1

Como dijo @Joel Coehoorn y @tvanfosson, está utilizando una cadena de formato numérico personalizado. La razón por la que funciona es que un valor booleano es convertible en cama doble utilizando la siguiente (en esencia):

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

Por lo tanto, si el valor es cierto, se devuelve 1 y si el valor es falso devuelve 0. En ese momento , las reglas de mapeo de sección se aplican como se describe por @tvanfosson (y posteriormente @Joel Coehoorn).

1

Steve-X tiene la mejor documentación para String.Format que he visto hasta ahora: Steve-X ToString()

Sé que pidió "ToString", pero ToString depende de la aplicación que está llamando (es decir DateTime .ToString(), decimal.ToString ... etc).

Si está realmente interesado en cómo funciona busto abierto reflector y lea detenidamente el código.

Cuestiones relacionadas