Realización de cambios de mayúsculas y minúsculas que no distinguen entre referencias culturales

Los métodos String.ToUpper, String.ToLower, Char.ToUpper y Char.ToLower disponen de sobrecargas que no aceptan ningún parámetro. De forma predeterminada, estas sobrecargas sin parámetros realizan cambios de mayúsculas y minúsculas en función del valor de CultureInfo.CurrentCulture. Esto produce resultados que tienen en cuenta las mayúsculas y minúsculas y que pueden cambiar en función de la referencia cultural. Para aclarar si desea cambios de mayúsculas y minúsculas que tengan en cuenta las referencias culturales o que no las tengan en cuenta, debe usar las sobrecargas de esos métodos que necesitan la especificación explícita de un parámetro culture. En el caso de cambios en el uso de mayúsculas y minúsculas dependientes de la referencia cultural, especifique CultureInfo.CurrentCulture para el parámetro culture. Si se trata de cambios en el uso de mayúsculas y minúsculas independientes de la referencia cultural, especifique CultureInfo.InvariantCulture para el parámetro culture.

A menudo, las cadenas se convierten a un uso estándar de mayúsculas y minúsculas, para permitir una búsqueda más fácil posteriormente. Cuando se usan las cadenas de este modo, se debe especificar CultureInfo.InvariantCulture para el parámetro culture, ya que el valor de Thread.CurrentCulture podría cambiar desde el momento en que se hacen los cambios de mayúsculas y minúsculas hasta el momento en que se realiza la búsqueda.

Si una decisión de seguridad se basa en una operación de cambio de mayúsculas y minúsculas, la operación debe ser independiente de la referencia cultural para asegurarse de que el resultado no se vea afectado por el valor de CultureInfo.CurrentCulture. Consulte la sección "Comparaciones de cadenas que usan la referencia cultural actual" del artículo Prácticas recomendadas para utilizar las cadenas en .NET para obtener un ejemplo que muestra cómo las operaciones de cadenas que tienen en cuenta la referencia cultural pueden generar resultados incoherentes.

String.ToUpper y String.ToLower

Para mayor claridad del código, se recomienda usar siempre sobrecargas de los métodos String.ToUpper y String.ToLower, que le permiten especificar una referencia cultural de forma explícita. Por ejemplo, en el siguiente código se realiza la búsqueda de un identificador. La operación key.ToLower tiene en cuenta las referencias culturales de manera predeterminada, pero este comportamiento no está claro leyendo el código.

Ejemplo

Shared Function LookupKey(key As String) As Object
   Return internalHashtable(key.ToLower())
End Function
static object LookupKey(string key)
{
    return internalHashtable[key.ToLower()];
}

Si quiere que la operación key.ToLower sea independiente de la referencia cultural, cambie el ejemplo anterior de la manera siguiente para usar CultureInfo.InvariantCulture de forma explícita cuando se cambien las mayúsculas y minúsculas.

Shared Function LookupKey(key As String) As Object
    Return internalHashtable(key.ToLower(CultureInfo.InvariantCulture))
End Function
static object LookupKey(string key)
{
    return internalHashtable[key.ToLower(CultureInfo.InvariantCulture)];
}

Char.ToUpper y Char.ToLower

Aunque los métodos Char.ToUpper y Char.ToLower tienen las mismas características que los métodos String.ToUpper y String.ToLower, las únicas referencias culturales afectadas son la de turco (Turquía) y azerbaiyano (latino, Azerbaiyán). Estas son las dos únicas referencias culturales con diferencias de mayúsculas y minúsculas en un solo carácter. Para obtener información más detallada sobre esta asignación única de mayúsculas y minúsculas, vea la sección "Uso de mayúsculas y minúsculas" en la documentación de la clase String. Para lograr claridad en el código y asegurar resultados coherentes, se recomienda usar siempre las sobrecargas de estos métodos que aceptan un parámetro CultureInfo.

Consulte también