Cuando los números, las fechas y las horas se formatean en cadenas o se analizan a partir de cadenas, se utiliza una cultura para determinar cómo se hace. Por ejemplo, en la en-US
cultura dominante tienes estas representaciones de cuerdas:
- 1,000,000.00 - un millón con una fracción de dos dígitos
- 29/01/2013 - fecha de esta publicación
En mi cultura ( da-DK
) los valores tienen esta representación de cadena:
- 1.000.000,00 - un millón con una fracción de dos dígitos
- 29-01-2013 - fecha de esta publicación
En el sistema operativo Windows, el usuario puede incluso personalizar cómo se formatean los números y las fechas / horas y también puede elegir otra cultura que no sea la cultura de su sistema operativo. El formato utilizado es la elección del usuario, que es cómo debe ser.
Así que cuando se formatea un valor que se muestra al usuario el uso de, por ejemplo, ToString
o String.Format
o analizada desde una cadena usando DateTime.Parse
o Decimal.Parse
el valor por defecto es usar el CultureInfo.CurrentCulture
. Esto permite al usuario controlar el formateo.
Sin embargo, una gran cantidad de formato de cadenas y análisis no son cadenas intercambiadas entre la aplicación y el usuario, sino entre la aplicación y algún formato de datos (por ejemplo, un archivo XML o CSV). En ese caso, no desea usarlo CultureInfo.CurrentCulture
porque si se formatea y analiza con diferentes culturas, puede romperse. En ese caso, desea utilizar CultureInfo.InvariantCulture
(que se basa en la en-US
cultura). Esto asegura que los valores pueden ser de ida y vuelta sin problemas.
La razón de que ReSharper le da la advertencia es que algunos programadores de aplicaciones no son conscientes de esta distinción que puede conducir a resultados no deseados pero nunca descubren esto porque sus CultureInfo.CurrentCulture
es decir en-US
, que tiene el mismo comportamiento que CultureInfo.InvariantCulture
. Sin embargo, tan pronto como la aplicación se use en otra cultura donde existe la posibilidad de usar una cultura para formatear y otra para analizar, la aplicación puede romperse.
Para resumirlo:
- Use
CultureInfo.CurrentCulture
(el valor predeterminado) si está formateando o analizando una cadena de usuario.
- Úselo
CultureInfo.InvariantCulture
si está formateando o analizando una cadena que debería ser analizable por una pieza de software.
- Raramente use una cultura nacional específica porque el usuario no puede controlar cómo se realiza el formateo y el análisis.