Exportar (0) Imprimir
Expandir todo
Este artículo proviene de un motor de traducción automática. Mueva el puntero sobre las frases del artículo para ver el texto original. Más información.
Traducción
Original

NumberFormatInfo (Clase)

Proporciona información de formato específica de la referencia cultural y los valores numéricos de análisis.

System.Object
  System.Globalization.NumberFormatInfo

Espacio de nombres:  System.Globalization
Ensamblado:  mscorlib (en mscorlib.dll)

[SerializableAttribute]
[ComVisibleAttribute(true)]
public sealed class NumberFormatInfo : ICloneable, 
	IFormatProvider

El tipo NumberFormatInfo expone los siguientes miembros.

  NombreDescripción
Método públicoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsNumberFormatInfoInicializa una nueva instancia modificable de la clase NumberFormatInfo que es independiente de la referencia cultural (invariable).
Arriba

  NombreDescripción
Propiedad públicaCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsCurrencyDecimalDigitsObtiene o establece el número de posiciones decimales que se van a utilizar en valores de divisa.
Propiedad públicaCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsCurrencyDecimalSeparatorObtiene o establece la cadena que se va a utilizar como separador decimal en valores de divisa.
Propiedad públicaCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsCurrencyGroupSeparatorObtiene o establece la cadena que separa grupos de dígitos a la izquierda de la coma decimal en valores de divisa.
Propiedad públicaCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsCurrencyGroupSizesObtiene o establece el número de dígitos en cada grupo a la izquierda de la coma decimal en valores de divisa.
Propiedad públicaCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsCurrencyNegativePatternObtiene o establece el modelo de formato para los valores de divisa negativos.
Propiedad públicaCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsCurrencyPositivePatternObtiene o establece el modelo de formato para los valores de divisa positivos.
Propiedad públicaCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsCurrencySymbolObtiene o establece la cadena que se va a utilizar como símbolo de divisa.
Propiedad públicaMiembro estáticoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsCurrentInfoObtiene un NumberFormatInfo de sólo lectura que aplica formato a los valores basándose en la referencia cultural actual.
Propiedad públicaDigitSubstitutionObtiene o establece un valor que especifica cómo la interfaz gráfica de usuario muestra la forma de un dígito.
Propiedad públicaMiembro estáticoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsInvariantInfoObtiene un objeto NumberFormatInfo de solo lectura que es independiente de la referencia cultural (de todos los idiomas).
Propiedad públicaCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsIsReadOnlyObtiene un valor que indica si este objeto NumberFormatInfo es de solo lectura.
Propiedad públicaCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsNaNSymbolObtiene o establece la cadena que representa el valor NaN (no un número) de IEEE.
Propiedad públicaNativeDigitsObtiene o establece una matriz de cadenas de dígitos nativos equivalentes a los dígitos occidentales del 0 al 9.
Propiedad públicaCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsNegativeInfinitySymbolObtiene o establece la cadena que representa un infinito negativo.
Propiedad públicaCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsNegativeSignObtiene o establece la cadena que denota que el número asociado es negativo.
Propiedad públicaCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsNumberDecimalDigitsObtiene o establece el número de posiciones decimales que se van a utilizar en valores numéricos.
Propiedad públicaCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsNumberDecimalSeparatorObtiene o establece la cadena que se va a utilizar como separador decimal en valores numéricos.
Propiedad públicaCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsNumberGroupSeparatorObtiene o establece la cadena que separa grupos de dígitos a la izquierda de la coma decimal en valores numéricos.
Propiedad públicaCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsNumberGroupSizesObtiene o establece el número de dígitos en cada grupo a la izquierda de la coma decimal en valores numéricos.
Propiedad públicaCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsNumberNegativePatternObtiene o establece el modelo de formato para los valores numéricos negativos.
Propiedad públicaCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsPercentDecimalDigitsObtiene o establece el número de posiciones decimales que se van a utilizar en valores de porcentaje.
Propiedad públicaCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsPercentDecimalSeparatorObtiene o establece la cadena que se va a utilizar como separador decimal en valores de porcentaje.
Propiedad públicaCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsPercentGroupSeparatorObtiene o establece la cadena que separa grupos de dígitos a la izquierda de la coma decimal en valores de porcentaje.
Propiedad públicaCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsPercentGroupSizesObtiene o establece el número de dígitos en cada grupo a la izquierda de la coma decimal en valores de porcentaje.
Propiedad públicaCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsPercentNegativePatternObtiene o establece el modelo de formato para los valores de porcentaje negativos.
Propiedad públicaCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsPercentPositivePatternObtiene o establece el modelo de formato para los valores de porcentaje positivos.
Propiedad públicaCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsPercentSymbolObtiene o establece la cadena que se va a utilizar como símbolo de porcentaje.
Propiedad públicaCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsPerMilleSymbolObtiene o establece la cadena que se va a utilizar como símbolo de por mil.
Propiedad públicaCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsPositiveInfinitySymbolObtiene o establece la cadena que representa un infinito positivo.
Propiedad públicaCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsPositiveSignObtiene o establece la cadena que denota que el número asociado es positivo.
Arriba

  NombreDescripción
Método públicoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsCloneCrea una copia superficial del objeto NumberFormatInfo.
Método públicoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsEquals(Object)Determina si el objeto especificado es igual al objeto actual. (Se hereda de Object).
Método públicoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsGetFormatObtiene un objeto del tipo especificado que proporciona un servicio de formato numérico.
Método públicoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsGetHashCode Sirve como una función hash para un tipo en particular. (Se hereda de Object).
Método públicoMiembro estáticoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsGetInstanceObtiene el NumberFormatInfo asociado al IFormatProvider especificado.
Método públicoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsGetType Obtiene el Type de la instancia actual. (Se hereda de Object).
Método públicoMiembro estáticoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsReadOnlyDevuelve un contenedor de NumberFormatInfo de solo lectura.
Método públicoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsToString Retorna una cadena que representa al objeto actual. (Se hereda de Object).
Arriba

La clase de NumberFormatInfo contiene información cultura- concreta que se utiliza cuando se da formato y analizar valores numéricos. Esta información incluye el símbolo de divisa, el símbolo decimal, el símbolo del separador de grupo, y los símbolos del positivo y signos negativos.

Crear instancias de un objeto NumberFormatInfo

Puede crear instancias de un objeto de NumberFormatInfo que representa las convenciones de formato de la referencia cultural actual, de la referencia cultural invariable, de una referencia cultural específica, o una referencia cultural neutra.

Crear instancias de un objeto NumberFormatInfo para la referencia cultural actual

Puede crear instancias de un objeto de NumberFormatInfo para la referencia cultural del subproceso actual en cualquiera de las siguientes maneras. En cada caso, el objeto devuelto de NumberFormatInfo es de solo lectura.

El ejemplo siguiente utiliza tres maneras de crear los objetos de NumberFormatInfo que representan las convenciones de formato de la referencia cultural actual. También recupera el valor de la propiedad de IsReadOnly para mostrar que cada objeto es de solo lectura.


using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      NumberFormatInfo current1 = CultureInfo.CurrentCulture.NumberFormat;
      Console.WriteLine(current1.IsReadOnly);

      NumberFormatInfo current2 = NumberFormatInfo.CurrentInfo;
      Console.WriteLine(current2.IsReadOnly);

      NumberFormatInfo current3 = NumberFormatInfo.GetInstance(CultureInfo.CurrentCulture);
      Console.WriteLine(current3.IsReadOnly);
   }
}
// The example displays the following output:
//       True
//       True
//       True


Puede crear un objeto programable de NumberFormatInfo que representa las convenciones de la referencia cultural del subproceso actual en cualquiera de las siguientes maneras:

  • Recuperar un objeto de NumberFormatInfo de maneras cualquiera de los que se muestra en el ejemplo de código anterior, y llamar al método de Clone en el objeto devuelto de NumberFormatInfo . Esto crea una copia del objeto original de NumberFormatInfo , salvo que la propiedad de IsReadOnly es false.

  • Llamando al método de CultureInfo.CreateSpecificCulture para crear un objeto de CultureInfo que representa la referencia cultural actual y, a continuación mediante la propiedad de CultureInfo.NumberFormat para recuperar el objeto de NumberFormatInfo .

El ejemplo siguiente muestra estas dos maneras de crear instancias de un objeto de NumberFormatInfo , y muestra el valor de la propiedad de IsReadOnly para mostrar que el objeto no es de sólo lectura.


using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      NumberFormatInfo current1 = NumberFormatInfo.CurrentInfo;
      current1 = (NumberFormatInfo) current1.Clone();
      Console.WriteLine(current1.IsReadOnly);

      CultureInfo culture2 = CultureInfo.CreateSpecificCulture(CultureInfo.CurrentCulture.Name);
      NumberFormatInfo current2 = culture2.NumberFormat;
      Console.WriteLine(current2.IsReadOnly);
   }
}
// The example displays the following output:
//       False
//       False


Observe que el sistema operativo Windows permite al usuario invalidar algunos de los valores de propiedad de NumberFormatInfo utilizados en operaciones numéricas de formato y análisis a través del elemento de Región y lenguaje en Panel de control. Por ejemplo, un usuario cuya referencia cultural es fuerza de inglés (Estados Unidos) elija para mostrar los valores de divisa como 1,1 USD en lugar de $1,1. Los objetos de NumberFormatInfo recuperados de las maneras discutieron todos reflejan previamente estos usuario overrides. Si esto es no deseado, puede crear un objeto de NumberFormatInfo que no refleje el usuario reemplazar (y que también es de lectura y escritura en lugar de sólo lectura) llamando al constructor de CultureInfo.CultureInfo(String, Boolean) y proporcione un valor de false para el argumento de useUserOverride . El ejemplo siguiente proporciona una ilustración de un sistema cuya referencia cultural actual es inglés (Estados Unidos) y cuyo símbolo de moneda se ha cambiado de $ a los USD.


using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      CultureInfo culture;
      NumberFormatInfo nfi;

      culture = CultureInfo.CurrentCulture;
      nfi = culture.NumberFormat;
      Console.WriteLine("Culture Name:    {0}", culture.Name);
      Console.WriteLine("User Overrides:  {0}", culture.UseUserOverride);
      Console.WriteLine("Currency Symbol: {0}\n", culture.NumberFormat.CurrencySymbol);

      culture = new CultureInfo(CultureInfo.CurrentCulture.Name, false);
      Console.WriteLine("Culture Name:    {0}", culture.Name);
      Console.WriteLine("User Overrides:  {0}", culture.UseUserOverride);
      Console.WriteLine("Currency Symbol: {0}", culture.NumberFormat.CurrencySymbol);
   }
}
// The example displays the following output:
//       Culture Name:    en-US
//       User Overrides:  True
//       Currency Symbol: USD
//       
//       Culture Name:    en-US
//       User Overrides:  False
//       Currency Symbol: $


Si la propiedad CultureInfo.UseUserOverride se establece en true, las propiedades CultureInfo.DateTimeFormat, CultureInfo.NumberFormat y CultureInfo.TextInfo también se recuperan desde la configuración del usuario. Si la configuración del usuario son incompatibles con la referencia cultural asociada al objeto de CultureInfo (por ejemplo, si el calendario seleccionado no es uno de los calendarios enumerados por la propiedad de OptionalCalendars ), los resultados de los métodos y los valores de las propiedades son indefinidos.

Crear instancias de un objeto NumberFormatInfo para la referencia cultural invariable

La referencia cultural neutra representa una referencia cultural sin tener en cuenta la referencia cultural. Se basa en el idioma inglés pero no en cualquier país o región de Inglés- los idiomas concretos. Aunque los datos de referencias culturales concretas pueden ser dinámicos y pueden cambiar para reflejar nuevas convenciones culturales o preferencias del usuario, los datos de la referencia cultural invariable no cambia. Un objeto de NumberFormatInfo que representa las convenciones de formato de la referencia cultural invariable se puede utilizar para dar formato a las operaciones en las que las cadenas de resultado no deberían variar según la referencia cultural.

Puede crear instancias de un objeto de NumberFormatInfo que representa las convenciones de formato de la referencia cultural invariable de las maneras siguientes:

  • Recuperación del valor de la propiedad InvariantInfo. El objeto devuelto de NumberFormatInfo es de solo lectura.

  • Recuperando el valor de la propiedad de CultureInfo.NumberFormat del objeto de CultureInfo devuelto por la propiedad de CultureInfo.InvariantCulture . El objeto devuelto de NumberFormatInfo es de solo lectura.

  • Llamando al constructor de clase sin parámetros de NumberFormatInfo . El objeto devuelto de NumberFormatInfo es de lectura y escritura.

El ejemplo siguiente utiliza cada uno de estos métodos para crear instancias de un objeto de NumberFormatInfo que representa la referencia cultural invariable. A continuación indica si el objeto es de solo lectura,


using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      NumberFormatInfo nfi;

      nfi = System.Globalization.NumberFormatInfo.InvariantInfo;
      Console.WriteLine(nfi.IsReadOnly);               

      nfi = CultureInfo.InvariantCulture.NumberFormat;
      Console.WriteLine(nfi.IsReadOnly);               

      nfi = New NumberFormatInfo();
      Console.WriteLine(nfi.IsReadOnly);               
   }
}
// The example displays the following output:
//       True
//       True
//       False


Crear instancias de un objeto NumberFormatInfo para una referencia cultural específica

Una referencia cultural concreta representa un lenguaje que se hable en un país o región determinados. Por ejemplo, en-us es una referencia cultural que representa el idioma inglés habla en Estados Unidos, y en- CA es una referencia cultural que representa el idioma inglés habla de Canadá. Puede crear instancias de un objeto de NumberFormatInfo que representa las convenciones de formato de una referencia cultural específica de las maneras siguientes:

El ejemplo siguiente utiliza estas cuatro maneras de crear un objeto de NumberFormatInfo que refleje las convenciones de formato de la referencia cultural indonesia (Indonesia). También indica si un objeto es de solo lectura.


using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      CultureInfo culture;
      NumberFormatInfo nfi;

      nfi = CultureInfo.GetCultureInfo("id-ID").NumberFormat;
      Console.WriteLine("Read-only: {0}", nfi.IsReadOnly);

      culture = new CultureInfo("id-ID");
      nfi = NumberFormatInfo.GetInstance(culture);
      Console.WriteLine("Read-only: {0}", nfi.IsReadOnly);

      culture = CultureInfo.CreateSpecificCulture("id-ID");
      nfi = culture.NumberFormat;
      Console.WriteLine("Read-only: {0}", nfi.IsReadOnly);

      culture = new CultureInfo("id-ID");
      nfi = culture.NumberFormat;
      Console.WriteLine("Read-only: {0}", nfi.IsReadOnly);
   }
}
// The example displays the following output:
//       Read-only: True
//       Read-only: False
//       Read-only: False
//       Read-only: False


Crear instancias de un objeto NumberFormatInfo para una referencia cultural neutra

Una referencia cultural neutra representa una referencia cultural o un lenguaje que son independientes de un país o una región. Normalmente es el elemento primario de una o varias referencias culturales específicas. Por ejemplo, fr es una referencia cultural neutra para el idioma francés y el elemento primario de la referencia cultural franco- fr. Crea un objeto de NumberFormatInfo que representa las convenciones de formato de una referencia cultural neutra de la misma manera que crea un objeto de NumberFormatInfo que representa las convenciones de formato de una referencia cultural concreta.

NotaNota

En .NET Framework 3.5 y versiones anteriores, al intentar recuperar un objeto de NumberFormatInfo que refleje las convenciones de formato de una referencia cultural neutra produce una excepción de NotSupportedException .

Sin embargo, dado que es independiente de un país o una región específicos, una referencia cultural neutra falta información cultura- específica de formato. En lugar de rellenar el objeto de NumberFormatInfo con valores genéricos, .NET Framework devuelve un objeto de NumberFormatInfo que refleje las convenciones de formato de una referencia cultural concreta que es un elemento secundario de la referencia cultural neutra. Por ejemplo, el objeto de NumberFormatInfo para la referencia cultural neutra de en refleja las convenciones de formato de la referencia cultural en-us, y el objeto de NumberFormatInfo para la referencia cultural fr refleja las convenciones de formato de la referencia cultural franco- fr.

Puede utilizar código como el siguiente para determinar las convenciones de formato de la referencia cultural específica para cada referencia cultural neutra representan.


using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Reflection;

public class Example
{
   public static void Main()
   {
      // Get all the neutral cultures
      List<String> names = new List<String>();
      Array.ForEach(CultureInfo.GetCultures(CultureTypes.NeutralCultures),
                    culture => names.Add(culture.Name));
      names.Sort();
      foreach (var name in names) {
         // Ignore the invariant culture.
         if (name == "") continue;

         ListSimilarChildCultures(name);        
      }
   }

   private static void ListSimilarChildCultures(string name)
   { 
      // Create the neutral NumberFormatInfo object.
      NumberFormatInfo nfi = CultureInfo.GetCultureInfo(name).NumberFormat;
      // Retrieve all specific cultures of the neutral culture.
      CultureInfo[] cultures = Array.FindAll(CultureInfo.GetCultures(CultureTypes.SpecificCultures), 
                               culture => culture.Name.StartsWith(name + "-", StringComparison.OrdinalIgnoreCase));
      // Create an array of NumberFormatInfo properties
      PropertyInfo[] properties = typeof(NumberFormatInfo).GetProperties(BindingFlags.Instance | BindingFlags.Public);
      bool hasOneMatch = false;

      foreach (var ci in cultures) {
         bool match = true;     
         // Get the NumberFormatInfo for a specific culture.
         NumberFormatInfo specificNfi = ci.NumberFormat;
         // Compare the property values of the two.
         foreach (var prop in properties) {
            // We're not interested in the value of IsReadOnly.     
            if (prop.Name == "IsReadOnly") continue;

            // For arrays, iterate the individual elements to see if they are the same.
            if (prop.PropertyType.IsArray) { 
               IList nList = (IList) prop.GetValue(nfi, null);
               IList sList = (IList) prop.GetValue(specificNfi, null);
               if (nList.Count != sList.Count) {
                  match = false;
                  break;
               } 

               for (int ctr = 0; ctr < nList.Count; ctr++) {
                  if (! nList[ctr].Equals(sList[ctr])) {
                     match = false;
                     break;
                  }     
               }
            }   
            else if (! prop.GetValue(specificNfi).Equals(prop.GetValue(nfi))) {
               match = false;
               break;   
            }        
         }
         if (match) {
            Console.WriteLine("NumberFormatInfo object for '{0}' matches '{1}'", 
                                      name, ci.Name);
            hasOneMatch = true;
         }                                       
      }
      if (! hasOneMatch)
         Console.WriteLine("NumberFormatInfo object for '{0}' --> No Match", name);            

      Console.WriteLine();
   }
}


NumberFormatInfo y datos dinámicos

Los datos cultura- específico para dar formato a los valores numéricos proporcionados por la clase de NumberFormatInfo es dinámico, como los datos culturales proporcionados por la clase de CultureInfo . No debe crear ninguna suposición sobre la estabilidad de valores de objetos de NumberFormatInfo asociados a determinados objetos de CultureInfo . Sólo los datos proporcionados por la referencia cultural invariable y su objeto asociado de NumberFormatInfo es estable. Otros datos pueden cambiar entre sesiones de la aplicación, o incluso dentro de una única sesión, por las razones siguientes:

  • Actualizaciones del sistema. Preferencias culturales como el símbolo de moneda o el cambio de los formatos de moneda con el tiempo. Cuando esto sucede, Windows Update incluye cambios en el valor de propiedad de NumberFormatInfo para una referencia cultural determinada.

  • Referencias culturales de reemplazo. La clase de CultureAndRegionInfoBuilder se puede usar para reemplazar los datos de una referencia cultural existente.

  • Colocar en cascada cambios a los valores de propiedad. Varias propiedades cultura- relacionadas puede cambiar en tiempo de ejecución, que, a su vez, hace que los datos de NumberFormatInfo al cambio. Por ejemplo, la referencia cultural actual se puede cambiar mediante programación o con la acción del usuario. Cuando esto sucede, el objeto de NumberFormatInfo devuelto por los cambios de propiedad de CurrentInfo a un objeto asociado a la referencia cultural actual.

  • Preferencias del usuario. Los usuarios de la aplicación pueden invalidar algunos de los valores asociados a la referencia cultural actual del sistema con las opciones de región e idioma del Panel de control. Por ejemplo, los usuarios pueden elegir otro símbolo de moneda o un símbolo diferente del separador decimal. Si la propiedad de CultureInfo.UseUserOverride se establece en true (el valor predeterminado), las propiedades del objeto de NumberFormatInfo también se recuperan de la configuración del usuario.

A partir de.NET Framework 2.0, todas las propiedades usuario- reemplazable de un objeto de NumberFormatInfo se inicializan cuando se crea el objeto. Todavía existe la posibilidad de la inconsistencia, porque ni la creación de objetos ni el proceso de reemplazo de usuario es atómico, y los valores pertinentes pueden cambiar durante la creación de objetos. Sin embargo, estas incoherencias deben ser sumamente raras.

Puede controlar si el usuario reemplaza se refleja en los objetos de NumberFormatInfo que representen la misma referencia cultural que la referencia cultural del subproceso actual. La tabla siguiente muestra las formas en las que un objeto de NumberFormatInfo puede recuperar e indica si el objeto resultante refleja el usuario reemplaza.

Origen del objeto CultureInfo y NumberFormatInfo

Refleja el usuario reemplaza

Propiedad CultureInfo.CurrentCulture.NumberFormat

Si

Propiedad NumberFormatInfo.CurrentInfo

Si

Método CultureInfo.CreateSpecificCulture

Si

Método CultureInfo.GetCultureInfo

No

Constructor CultureInfo(String)

Si

Constructor CultureInfo.CultureInfo(String, Boolean)

Depende del valor del parámetro de useUserOverride

A menos que haya una razón atractiva para que de otra forma, debe respetar el usuario reemplaza cuando se utiliza el objeto de NumberFormatInfo en aplicaciones cliente para dar formato y analizar los datos proporcionados por el usuario o mostrar datos numéricos. Para las aplicaciones de servidor o aplicaciones desatendidas, no debe respetar el usuario reemplaza. Sin embargo, si utiliza el objeto de NumberFormatInfo o explícitamente o conservar implícitamente los datos numéricos en formato de cadena, debe cualquier uso un objeto de NumberFormatInfo que refleje las convenciones de formato de la referencia cultural invariable, o debe especificar una cadena de formato numérico personalizado que utilice con independencia de la referencia cultural.

IFormatProvider, NumberFormatInfo, y formato numérico

Un objeto de NumberFormatInfo se utiliza de forma implícita o explícita en todas las operaciones numéricas de formato. Estas llamadas de inclusión a los métodos siguientes:

Todas las operaciones numéricas de formato utilizan una implementación de IFormatProvider . La interfaz IFormatProvider incluye un solo método: GetFormat(Type). Éste es un método de devolución de llamada que se pasa un objeto de Type que representa el tipo necesario para proporcionar información de formato. El método es responsable de devolver una instancia de ese tipo o de null, si no puede proporcionar una instancia del tipo. .NET Framework proporciona dos implementaciones de IFormatProvider para dar formato a los números:

  • La clase de CultureInfo , que representa una referencia cultural concreta (o un lenguaje específico de un país o región específicos). En una operación de formato numérico, el método de CultureInfo.GetFormat devuelve el objeto de NumberFormatInfo asociado a la propiedad de CultureInfo.NumberFormat .

  • La clase de NumberFormatInfo , que proporciona información sobre las convenciones de formato de la referencia cultural asociada. El método de NumberFormatInfo.GetFormat devuelve una instancia de.

Si una implementación de IFormatProvider no se proporciona un método de formato explícitamente, un objeto de CultureInfo devuelta por la propiedad de CultureInfo.CurrentCulture se utiliza que representa la referencia cultural del subproceso actual.

El ejemplo siguiente se muestra la relación entre la interfaz de IFormatProvider y la clase de NumberFormatInfo en operaciones de formato definiendo una implementación personalizada de IFormatProvider . El método de GetFormat muestra el nombre de tipo del objeto solicitado por la operación de formato. Si la interfaz se soliciten un objeto de NumberFormatInfo , este método proporciona el objeto de NumberFormatInfo para la referencia cultural del subproceso actual. Como el resultado del ejemplo, el método de Decimal.ToString(IFormatProvider) solicita un objeto de NumberFormatInfo para proporcionar información de formato, mientras que el método de String.Format(IFormatProvider, String, Object[]) solicita los objetos de NumberFormatInfo y de DateTimeFormatInfo junto con una implementación de ICustomFormatter .


using System;
using System.Globalization;

public class CurrentCultureFormatProvider : IFormatProvider
{
   public Object GetFormat(Type formatType) 
   {
      Console.WriteLine("Requesting an object of type {0}", 
                        formatType.Name);
      if (formatType == typeof(NumberFormatInfo))
         return NumberFormatInfo.CurrentInfo;
      else if (formatType == typeof(DateTimeFormatInfo))
         return DateTimeFormatInfo.CurrentInfo;
      else
         return null;
   }
}

public class Example
{
   public static void Main()
   {
      Decimal amount = 1203.541m;
      string value = amount.ToString("C2", new CurrentCultureFormatProvider());
      Console.WriteLine(value);
      Console.WriteLine();
      string composite = String.Format(new CurrentCultureFormatProvider(), 
                                       "Date: {0}   Amount: {1}   Description: {2}",
                                       DateTime.Now, 1264.03m, "Service Charge");
      Console.WriteLine(composite);
      Console.WriteLine();
   }
}
// The example displays output like the following:
//    Requesting an object of type NumberFormatInfo
//    $1,203.54
//    
//    Requesting an object of type ICustomFormatter
//    Requesting an object of type DateTimeFormatInfo
//    Requesting an object of type NumberFormatInfo
//    Date: 11/15/2012 2:00:01 PM   Amount: 1264.03   Description: Service Charge


Si una implementación de IFormatProvider no se proporciona en una llamada al método de formato numérico, llama al método de CultureInfo.CurrentCulture.GetFormat , que devuelve el objeto de NumberFormatInfo correspondiente a la referencia cultural del subproceso actual.

Propiedades de las cadenas de formato y NumberFormatInfo

Cada operación de formato se utiliza una cadena de formato numérico estándar o personalizada para generar una cadena de resultado de un número. En algunos casos, el uso de una cadena de formato para generar una cadena de resultado es explícito, como en el ejemplo siguiente. Este código llama al método de Decimal.ToString(IFormatProvider) para convertir un valor de Decimal a varias representaciones de cadena usando las convenciones de formato de la referencia cultural en-us.


using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      string[] formatStrings = { "C2", "E1", "F", "G3", "N", 
                                 "#,##0.000", "0,000,000,000.0##" };
      CultureInfo culture = CultureInfo.CreateSpecificCulture("en-US");
      Decimal[] values = { 1345.6538m, 1921651.16m };

      foreach (var value in values) {
         foreach (var formatString in formatStrings) {
            string resultString = value.ToString(formatString, culture);
            Console.WriteLine("{0,-18} -->  {1}", formatString, resultString);
         }
         Console.WriteLine();      
      }   
   }
}
// The example displays the following output:
//       C2                 -->  $1,345.65
//       E1                 -->  1.3E+003
//       F                  -->  1345.65
//       G3                 -->  1.35E+03
//       N                  -->  1,345.65
//       #,##0.000          -->  1,345.654
//       0,000,000,000.0##  -->  0,000,001,345.654
//       
//       C2                 -->  $1,921,651.16
//       E1                 -->  1.9E+006
//       F                  -->  1921651.16
//       G3                 -->  1.92E+06
//       N                  -->  1,921,651.16
//       #,##0.000          -->  1,921,651.160
//       0,000,000,000.0##  -->  0,001,921,651.16


En otros casos, el uso de una cadena de formato es implícitamente. Por ejemplo, en las llamadas a métodos siguientes en el valor predeterminado o al método sin parámetros de Decimal.ToString() , el valor de la instancia de Decimal se formatea utilizando (“g”) el especificador de formato general y las convenciones de la referencia cultural actual, que en este caso es la referencia cultural en-us.


using System;

public class Example
{
   public static void Main()
   {
      Decimal[] values = { 1345.6538m, 1921651.16m };

      foreach (var value in values) {
         string resultString = value.ToString();
         Console.WriteLine(resultString);
         Console.WriteLine();      
      }   
   }
}
// The example displays the following output:
//       1345.6538
//       
//       1921651.16


Cada cadena de formato numérico estándar utiliza una o más propiedades de NumberFormatInfo para determinar el modelo o los símbolos utilizados en la cadena de resultado. De igual forma, cada especificador de formato numérico personalizado excepto “0 " y “#” símbolos en la cadena de resultado definidos por las propiedades de NumberFormatInfo . La tabla siguiente se enumeran los especificadores standard y de formato numérico personalizado de y sus propiedades asociadas de NumberFormatInfo . Para cambiar la apariencia de la cadena de resultado de una referencia cultural determinada, vea la sección de Propiedades de modificación NumberFormatInfo . Para obtener más información sobre el uso de estos especificadores de formato, vea Cadenas con formato numérico estándar y Cadenas con formato numérico personalizado.

Especificador de formato

Propiedades asociadas

“C” o “c” (especificador de formato de divisa)

CurrencyDecimalDigits , definir el número predeterminado de dígitos fraccionarios.

CurrencyDecimalSeparator , definir el símbolo del separador decimal.

CurrencyGroupSeparator , definir el grupo o el separador de miles.

CurrencyGroupSizes , definir los tamaños de grupos enteros.

CurrencyNegativePattern , definir el modelo de los valores de divisa negativos.

CurrencyPositivePattern , definir el modelo de los valores de divisa positivos.

CurrencySymbol , definir el símbolo de moneda.

NegativeSign , definir el símbolo de signo negativo.

“D” o “d” (especificador de formato decimal)

NegativeSign , definir el símbolo de signo negativo.

“E” o “e” (especificador de formato exponencial o científico)

NegativeSign , definir el símbolo de signo negativo en la mantisa y el exponente.

NumberDecimalSeparator , definir el símbolo del separador decimal.

PositiveSign , definir el signo positivo en el exponente.

“F” o “f” (especificador de formato de punto fijo)

NegativeSign , definir el símbolo de signo negativo.

NumberDecimalDigits , definir el número predeterminado de dígitos fraccionarios.

NumberDecimalSeparator , definir el símbolo del separador decimal.

“G” o “g” (especificador de formato general)

NegativeSign , definir el símbolo de signo negativo.

NumberDecimalSeparator , definir el símbolo del separador decimal.

PositiveSign , definir el signo positivo para las cadenas de resultado en formato exponencial.

“N” o “n” (especificador de formato numérico)

NegativeSign , definir el símbolo de signo negativo.

NumberDecimalDigits , definir el número predeterminado de dígitos fraccionarios.

NumberDecimalSeparator , definir el símbolo del separador decimal.

NumberGroupSeparator , definir el símbolo del separador de grupo (miles).

NumberGroupSizes , definir el número de dígitos enteros en un grupo.

NumberNegativePattern , definir el formato de los valores negativos.

“P” o “p” (especificador de formato de porcentaje)

NegativeSign , definir el símbolo de signo negativo.

PercentDecimalDigits , definir el número predeterminado de dígitos fraccionarios.

PercentDecimalSeparator , definir el símbolo del separador decimal.

PercentGroupSeparator , definir el símbolo del separador de grupo.

PercentGroupSizes , definir el número de dígitos enteros en un grupo.

PercentNegativePattern , definir la posición del símbolo de porcentaje y el símbolo negativo para valores negativos.

PercentPositivePattern , definir la posición del símbolo de porcentaje para valores positivos.

PercentSymbol , definir el símbolo de porcentaje.

“R” o “r” (especificador de formato de ida y vuelta)

NegativeSign , definir el símbolo de signo negativo.

NumberDecimalSeparator , definir el símbolo del separador decimal.

PositiveSign , definir el signo positivo en un exponente.

“X” o “x” (especificador de formato hexadecimal)

Ninguno.

"." (especificador de formato personalizado del separador decimal)

NumberDecimalSeparator , definir el símbolo del separador decimal.

“,” (especificador de formato personalizado de separador de grupos)

NumberGroupSeparator , definir el símbolo del separador de grupo (miles).

“%” (especificador de formato personalizado de marcador de posición de porcentaje)

PercentSymbol , definir el símbolo de porcentaje.

“‰” (por especificador de formato personalizado de marcador de mille)

PerMilleSymbol , definir símbolo de " por mil ".

“E” (especificador de formato personalizado de la notación exponencial)

NegativeSign , definir el símbolo de signo negativo en la mantisa y el exponente.

PositiveSign , definir el signo positivo en el exponente.

Observe que la clase de NumberFormatInfo incluye una propiedad de NativeDigits que especifique los dígitos de base 10 utilizados por una referencia cultural específica. Sin embargo, no se utiliza en operaciones de formato; sólo dígitos 0 (U+0030) de Latín básico con 9 (U+0039) se utilizan en la cadena de resultado. Además, por Single y valores de Double de NaN, de PositiveInfinity, y de NegativeInfinity, la cadena de resultado consta exclusivamente en los símbolos definidos por NaNSymbol, PositiveInfinitySymbol, y las propiedades de NegativeInfinitySymbol , respectivamente.

Propiedades de modificación NumberFormatInfo

Puede modificar las propiedades de un objeto de NumberFormatInfo para personalizar la cadena de resultado generada en una operación de formato numérico. Para hacerlo:

  1. Cree una copia de lectura y escritura de un objeto de NumberFormatInfo cuyas convenciones de formato desee modificar. Para obtener más información, vea la sección de Crear instancias de un objeto NumberFormatInfo .

  2. Modifique la propiedad o propiedades que se utilizan para generar la cadena de resultado deseado. Para obtener información sobre cómo da formato métodos utilice las propiedades de NumberFormatInfo para definir cadenas de resultado, vea la sección de Propiedades de las cadenas de formato y NumberFormatInfo .

  3. Utilice el objeto personalizado de NumberFormatInfo como argumento de IFormatProvider en llamadas a dar formato a métodos.

NotaNota

En lugar dinámicamente de modificar los valores de propiedad de una referencia cultural cada vez que se inicia una aplicación, puede utilizar la clase de CultureAndRegionInfoBuilder para definir una referencia cultural personalizada (una referencia cultural que tenga un nombre único y que complemente referencias culturales existentes) o una referencia cultural de reemplazo (una que se utiliza en lugar de una referencia cultural concreta).

Las secciones siguientes se proporcionan algunos ejemplos.

2xdwt6xx.collapse_all(es-es,VS.110).gifModificar el símbolo de moneda y de modelo

El ejemplo siguiente se modifica un objeto de NumberFormatInfo que representa las convenciones de formato de la referencia cultural en-us. Asigna el símbolo de divisa ISO-4217 a la propiedad de CurrencySymbol y define un modelo por valores de divisa que consta del símbolo de moneda seguido de un espacio y un valor numérico.


using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      // Retrieve a writable NumberFormatInfo object.
      CultureInfo enUS = CultureInfo.CreateSpecificCulture("en-US");
      NumberFormatInfo nfi = enUS.NumberFormat;

      // Use the ISO currency symbol instead of the native currency symbol.
      nfi.CurrencySymbol =  (new RegionInfo(enUS.Name)).ISOCurrencySymbol;
      // Change the positive currency pattern to <code><space><value>.
      nfi.CurrencyPositivePattern = 2;
      // Change the negative currency pattern to <code><space><sign><value>.     
      nfi.CurrencyNegativePattern = 12;

      // Produce the result strings by calling ToString.
      Decimal[] values = { 1065.23m, 19.89m, -.03m, -175902.32m };
      foreach (var value in values)
         Console.WriteLine(value.ToString("C", enUS));

      Console.WriteLine();

      // Produce the result strings by calling a composite formatting method.
      foreach (var value in values)
         Console.WriteLine(String.Format(enUS, "{0:C}", value));      
   }
}
// The example displays the following output:
//       USD 1,065.23
//       USD 19.89
//       USD -0.03
//       USD -175,902.32
//       
//       USD 1,065.23
//       USD 19.89
//       USD -0.03
//       USD -175,902.32


2xdwt6xx.collapse_all(es-es,VS.110).gifDar formato a un número de identificación nacional

Muchos números de identificación nacionales constan exclusivamente en dígitos y para que puedan con facilidad con formato modificando las propiedades de un objeto de NumberFormatInfo . Por ejemplo, un número de seguridad social en Estados Unidos consta de 9 dígitos organizados como sigue: XXX-XX-XXXX. El siguiente ejemplo se supone que los números de seguridad sociales se almacenan como valores enteros y los da formato adecuado.


using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      // Instantiate a read-only NumberFormatInfo object.
      CultureInfo enUS = CultureInfo.CreateSpecificCulture("en-US");
      NumberFormatInfo nfi = enUS.NumberFormat;

      // Modify the relevant properties.
      nfi.NumberGroupSeparator = "-";
      nfi.NumberGroupSizes = new int[] { 3, 2, 4};
      nfi.NumberDecimalDigits = 0;

      int[] ids = { 111223333, 999776666 };

      // Produce the result string by calling ToString.
      foreach (var id in ids)
         Console.WriteLine(id.ToString("N", enUS));

      Console.WriteLine();

      // Produce the result string using composite formatting.
      foreach (var id in ids)
         Console.WriteLine(String.Format(enUS, "{0:N}", id));
   }
}
// The example displays the following output:
//       1112-23-333
//       9997-76-666
//       
//       1112-23-333
//       9997-76-666


Analizar cadenas numéricas

El análisis implica convertir en la representación de cadena de un número en un número. Cada tipo numérico en .NET Framework incluye dos métodos que analizan sobrecargados: Parse y TryParse. El método de Parse convierte una cadena a un número y produce una excepción si la conversión. El método de TryParse convierte una cadena en un número, asigna el número en un argumento de out , y devuelve un valor de Boolean que indica si la conversión se realizó correctamente.

Los métodos parse implícita o explícitamente un valor de enumeración de NumberStyles para determinar qué elementos de estilo (como separadores de grupos, un separador decimal, o un símbolo de moneda) puede estar presente en una cadena si la operación de análisis se realice correctamente. Si un valor de NumberStyles no aparecerá en la llamada al método, el valor predeterminado es un valor de NumberStyles que incluye Float y AllowThousands marcadores, que especifica que la cadena analizada puede incluir los símbolos de grupo, separador decimal, un signo negativo, y los caracteres de espacio en blanco, o puede ser la representación de cadena de un número en notación exponencial.

Los métodos de análisis también implícita o explícitamente un objeto de NumberFormatInfo que define los símbolos y los modelos concretos que pueden aparecer en la cadena que se va a analizar. Si un objeto de NumberFormatInfo no se proporciona, el valor predeterminado es NumberFormatInfo para la referencia cultural del subproceso actual. Para obtener más información sobre el análisis, vea métodos individuales de análisis, como Int16.Parse(String), Int32.Parse(String, NumberStyles), Int64.Parse(String, IFormatProvider), Decimal.Parse(String, NumberStyles, IFormatProvider), Double.TryParse(String, Double), y BigInteger.TryParse(String, NumberStyles, IFormatProvider, BigInteger).

El ejemplo siguiente se muestra la naturaleza cultura- confidencial de cadenas de análisis. Intenta analizar una cadena que incluye separadores de miles usando las convenciones de en-us, de franco- fr, y de las referencias culturales invariables. Una cadena que incluye la coma como separador de grupos y el período como un separador decimal no puede analizar en la referencia cultural franco- fr, y una cadena con el espacio en blanco como separador de grupos y coma como separador decimal no puede analizar en-us y referencias culturales invariables.


using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      String[] values = { "1,034,562.91", "9 532 978,07" };
      String[] cultureNames = { "en-US", "fr-FR", "" };

      foreach (var value in values) {
         foreach (var cultureName in cultureNames) {
            CultureInfo culture = CultureInfo.CreateSpecificCulture(cultureName);
            String name = culture.Name == "" ? "Invariant" : culture.Name;
            try {
               Decimal amount = Decimal.Parse(value, culture);
               Console.WriteLine("'{0}' --> {1} ({2})", value, amount, name);
            }
            catch (FormatException) {
               Console.WriteLine("'{0}': FormatException ({1})",
                                 value, name);
            }   
         }
         Console.WriteLine();
      }
   }
}
// The example displays the following output:
//       '1,034,562.91' --> 1034562.91 (en-US)
//       '1,034,562.91': FormatException (fr-FR)
//       '1,034,562.91' --> 1034562.91 (Invariant)
//       
//       '9 532 978,07': FormatException (en-US)
//       '9 532 978,07' --> 9532978.07 (fr-FR)
//       '9 532 978,07': FormatException (Invariant)


El análisis aparece normalmente en dos contextos:

  • Como una operación que está diseñado para convertir los datos proporcionados por el usuario en un valor numérico.

  • Como una operación que ha sido diseñado para la operación de ida y vuelta un valor numérico; es decir, para deserializar un valor numérico que se serializado previamente como cadena.

Las secciones siguientes describen estas dos operaciones con mayor detalle.

2xdwt6xx.collapse_all(es-es,VS.110).gifCadenas de usuario de análisis

Cuando se está analizando las cadenas numéricas entradas por el usuario, debe crear instancias siempre un objeto de NumberFormatInfo que refleje los entornos cultural del usuario. Para obtener información sobre cómo crear instancias de un objeto de NumberFormatInfo que refleje personalizaciones de usuario, vea la sección de NumberFormatInfo y datos dinámicos .

El ejemplo siguiente se muestra la diferencia entre una operación de análisis que refleje entornos culturales de usuario y otra que no lo haga. En este caso, la referencia cultural del sistema predeterminada es en-us, pero el usuario ha definido “,” como el símbolo decimal y “.” como separador de grupos en Panel de control, Región y lenguaje. Normalmente, estos símbolos se invierte en la referencia cultural predeterminada de en-us. Cuando el usuario escribe una cadena que refleje la configuración del usuario, y la cadena es analizado por un objeto de NumberFormatInfo que también refleje configuraciones de usuario (reemplaza), la operación de análisis devuelve un resultado correcto. Sin embargo, cuando la cadena se analiza en un objeto de NumberFormatInfo que refleje los entornos culturales estándar de en-us, confunde el símbolo de punto desde un separador de grupos y devuelve un resultado incorrecto.


using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      CultureInfo stdCulture = CultureInfo.GetCultureInfo("en-US");
      CultureInfo custCulture = CultureInfo.CreateSpecificCulture("en-US"); 

      String value = "310,16";
      try {
         Console.WriteLine("{0} culture reflects user overrides: {1}", 
                           stdCulture.Name, stdCulture.UseUserOverride);
         Decimal amount = Decimal.Parse(value, stdCulture);
         Console.WriteLine("'{0}' --> {1}", value, amount.ToString(CultureInfo.InvariantCulture));                                                                                        
      }
      catch (FormatException) {
         Console.WriteLine("Unable to parse '{0}'", value);
      }    
      Console.WriteLine();

      try {
         Console.WriteLine("{0} culture reflects user overrides: {1}", 
                           custCulture.Name, custCulture.UseUserOverride);
         Decimal amount = Decimal.Parse(value, custCulture);
         Console.WriteLine("'{0}' --> {1}", value, amount.ToString(CultureInfo.InvariantCulture));                                                                                        
      }
      catch (FormatException) {
         Console.WriteLine("Unable to parse '{0}'", value);
      }   
   }
}
// The example displays the following output:
//       en-US culture reflects user overrides: False
//       '310,16' --> 31016
//       
//       en-US culture reflects user overrides: True
//       '310,16' --> 310.16


2xdwt6xx.collapse_all(es-es,VS.110).gifSerializar y deserializar datos numéricos

Cuando el tipo de datos numéricos se serializa en formato de cadena y se deserializa posteriormente y se analiza, las cadenas se deben generar y analizar con las convenciones de la referencia cultural invariable. Las operaciones de formato y análisis no deben reflejar las convenciones de una referencia cultural concreta. Si se utilizan los valores cultura-específicos, la portabilidad de los datos se limita estrictamente; puede ser deserializada correctamente sólo en un subproceso cuyos valores cultura- específicos son idénticos a los del subproceso donde se serializada. En algunos casos, esto significa que los datos pueden ni siquiera deserializar correctamente en el mismo sistema en el que se ha serializado.

El ejemplo siguiente se muestra lo que puede suceder cuando se infringen este principio. Los valores de punto flotante en una matriz se convierten en cadenas cuando el subproceso actual utiliza los valores cultura- específicos de la referencia cultural en-us. Los datos se analizado por un subproceso que utiliza los valores cultura- específicos de la referencia cultural de en- GB. En este caso, aunque cada operación de análisis se realice correctamente, los datos no de ida y vuelta correctamente y el daño en los datos. En otros casos, una operación de análisis podría producir un error y una excepción de FormatException podría producir.


using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Threading;

public class Example
{
   public static void Main()
   {
      Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US");
      PersistData();

      Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-GB");
      RestoreData();
   }

   private static void PersistData()
   {
      // Define an array of floating-point values.
      Double[] values = { 160325.972, 8631.16, 1.304e5, 98017554.385, 
                          8.5938287084321676e94 };
      Console.WriteLine("Original values: ");
      foreach (var value in values) 
         Console.WriteLine(value.ToString("R", CultureInfo.InvariantCulture));

      // Serialize an array of doubles to a file 
      StreamWriter sw = new StreamWriter(@".\NumericData.bin");
      for (int ctr = 0; ctr < values.Length; ctr++) {
         sw.Write(values[ctr].ToString("R"));
         if (ctr < values.Length - 1) sw.Write("|");
      }
      sw.Close();
      Console.WriteLine();
   }

   private static void RestoreData()
   {   
      // Deserialize the data
      StreamReader sr = new StreamReader(@".\NumericData.bin");
      String data = sr.ReadToEnd();
      sr.Close();

      String[] stringValues = data.Split('|');
      List<Double> newValueList = new List<Double>();

      foreach (var stringValue in stringValues) {
         try {
            newValueList.Add(Double.Parse(stringValue));
         }
         catch (FormatException) {
            newValueList.Add(Double.NaN);
         }   
      }                                   

      Console.WriteLine("Restored values:");
      foreach (var newValue in newValueList) 
         Console.WriteLine(newValue.ToString("R", NumberFormatInfo.InvariantInfo));
   }
}
// The example displays the following output:
//       Original values:
//       160325.972
//       8631.16
//       130400
//       98017554.385
//       8.5938287084321671E+94
//       
//       Restored values:
//       160325972
//       863116
//       130400
//       98017554385
//       8.5938287084321666E+110


El ejemplo siguiente muestra cómo recuperar un objeto NumberFormatInfo para un objeto CultureInfo correspondiente y utilizar el objeto recuperado para consultar la información de formato de número de la referencia cultural especificada.


using System;
using System.Globalization;
using System.Text;

public sealed class App 
{
    static void Main() 
    {
        StringBuilder sb = new StringBuilder();

        // Loop through all the specific cultures known to the CLR.
        foreach (CultureInfo ci in CultureInfo.GetCultures(CultureTypes.SpecificCultures)) 
        {
            // Only show the currency symbols for cultures that speak English.
            if (ci.TwoLetterISOLanguageName != "en") continue;

            // Display the culture name and currency symbol.
            NumberFormatInfo nfi = ci.NumberFormat;
            sb.AppendFormat("The currency symbol for '{0}' is '{1}'",
                ci.DisplayName, nfi.CurrencySymbol);
            sb.AppendLine();
        }
        Console.WriteLine(sb.ToString());
    }
}

// This code produces the following output.
//
// The currency symbol for 'English (United States)' is '$'
// The currency symbol for 'English (United Kingdom)' is '�'
// The currency symbol for 'English (Australia)' is '$'
// The currency symbol for 'English (Canada)' is '$'
// The currency symbol for 'English (New Zealand)' is '$'
// The currency symbol for 'English (Ireland)' is '?'
// The currency symbol for 'English (South Africa)' is 'R'
// The currency symbol for 'English (Jamaica)' is 'J$'
// The currency symbol for 'English (Caribbean)' is '$'
// The currency symbol for 'English (Belize)' is 'BZ$'
// The currency symbol for 'English (Trinidad and Tobago)' is 'TT$'
// The currency symbol for 'English (Zimbabwe)' is 'Z$'
// The currency symbol for 'English (Republic of the Philippines)' is 'Php'


.NET Framework

Compatible con: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Compatible con: 4, 3.5 SP1

Biblioteca de clases portable

Compatible con: Biblioteca de clases portable

.NET para aplicaciones de la Tienda Windows

Compatible con: Windows 8

.NET para aplicaciones de Windows Phone

Compatible con: Windows Phone 8, Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (no se admite el rol Server Core), Windows Server 2008 R2 (se admite el rol Server Core con SP1 o versiones posteriores; no se admite Itanium)

.NET Framework no admite todas las versiones de todas las plataformas. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

Todos los miembros static (Shared en Visual Basic) públicos de este tipo son seguros para la ejecución de subprocesos. No se garantiza que los miembros de instancias sean seguros para la ejecución de subprocesos.

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft