2009-01-24 21 views

Respuesta

28

En general, querrá utilizar InvariantCulture si la cadena que está generando debe persistir de forma independiente de la cultura del usuario actual (por ejemplo, en el registro o en un archivo).

Querrá usar CurrentCulture para las cadenas que se presentarán en la interfaz de usuario para el usuario actual (formularios, informes).

Pueden aparecer errores sutiles si usa CurrentCulture donde debería usar InvariantCulture: errores que solo salen a la luz cuando hay varios usuarios con culturas diferentes accediendo a la misma entrada o archivo, o si un usuario cambia su cultura predeterminada.

Especificar explícitamente CurrentCulture (el valor predeterminado si se omite el argumento IFormatProvider), es esencialmente documentación que demuestra que ha considerado lo anterior y que la cadena que se está generando debe utilizar la cultura del usuario actual. Es por eso que FxCop recomienda que debe especificar el argumento IFormatProvider.

4

Es especialmente útil si le importa la localización (Globalización) en su aplicación. Es decir, si desea que su aplicación sea compatible con varios idiomas y formatos específicos de cultura, entonces debe usar eso.

5

No, no es necesario que especifique la referencia cultural a menos que la cadena contenga elementos específicos de la cultura, como separadores decimales, moneda, etc., que deban representarse según la cultura.

19

Si no se especifica el IFormatProvider (o equivalentemente pasar null) la mayoría de los tipos de argumentos finalmente caer a través de ser formateada de acuerdo con CultureInfo.CurrentCulture. Lo que resulta interesante es que puede especificar un IFormatProvider personalizado que puede obtener la primera grieta en formatear los argumentos, o anular la cultura de formateo dependiendo del otro contexto.

Tenga en cuenta que CultureInfo.CurrentCulture afecta al formato de argumentos, no a la selección de recursos; la selección de recursos está controlada por CultureInfo.CurrentUICulture.

+2

Cómo definir IFormatProvider personalizado - http://www.csharp-examples.net/custom-iformatprovider/ –

+2

¿Qué pasa si el objeto es una cadena? ¿Hay alguna forma en que la cultura pueda marcar la diferencia? (A diferencia de formatear algo como DateTime) –

Cuestiones relacionadas