Ler en inglés

Compartir por


IFormatProvider.GetFormat(Type) Método

Definición

Devuelve un objeto que proporciona servicios de formato para el tipo especificado.

C#
public object GetFormat(Type formatType);
C#
public object? GetFormat(Type? formatType);

Parámetros

formatType
Type

Objeto que especifica el tipo de objeto de formato que se va a devolver.

Devoluciones

Instancia del objeto especificado por formatType si la implementación de IFormatProvider puede proporcionar ese tipo de objeto; de lo contrario, devuelve null.

Ejemplos

En el ejemplo siguiente se muestra el uso de una clase que implementa la IFormatProvider interfaz y el GetFormat método . La AcctNumberFormat clase convierte un Int64 valor que representa un número de cuenta en un número de cuenta con formato de 12 dígitos. Su GetFormat método devuelve una referencia a sí misma si el formatType parámetro hace referencia a una clase que implementa ICustomFormatter; de lo contrario, GetFormat devuelve null.

C#
public class AcctNumberFormat : IFormatProvider, ICustomFormatter
{
   private const int ACCT_LENGTH = 12;

   public object GetFormat(Type formatType)
   {
      if (formatType == typeof(ICustomFormatter))
         return this;
      else
         return null;
   }

   public string Format(string fmt, object arg, IFormatProvider formatProvider)
   {
      // Provide default formatting if arg is not an Int64.
      if (arg.GetType() != typeof(Int64))
         try {
            return HandleOtherFormats(fmt, arg);
         }
         catch (FormatException e) {
            throw new FormatException(String.Format("The format of '{0}' is invalid.", fmt), e);
         }

      // Provide default formatting for unsupported format strings.
      string ufmt = fmt.ToUpper(CultureInfo.InvariantCulture);
      if (!(ufmt == "H" || ufmt == "I"))
         try {
            return HandleOtherFormats(fmt, arg);
         }
         catch (FormatException e) {
            throw new FormatException(String.Format("The format of '{0}' is invalid.", fmt), e);
         }

      // Convert argument to a string.
      string result = arg.ToString();

      // If account number is less than 12 characters, pad with leading zeroes.
      if (result.Length < ACCT_LENGTH)
         result = result.PadLeft(ACCT_LENGTH, '0');
      // If account number is more than 12 characters, truncate to 12 characters.
      if (result.Length > ACCT_LENGTH)
         result = result.Substring(0, ACCT_LENGTH);

      if (ufmt == "I")                    // Integer-only format.
         return result;
      // Add hyphens for H format specifier.
      else                                         // Hyphenated format.
         return result.Substring(0, 5) + "-" + result.Substring(5, 3) + "-" + result.Substring(8);
   }

   private string HandleOtherFormats(string format, object arg)
   {
      if (arg is IFormattable)
         return ((IFormattable)arg).ToString(format, CultureInfo.CurrentCulture);
      else if (arg != null)
         return arg.ToString();
      else
         return String.Empty;
   }
}

A continuación, se puede pasar una instancia de la AcctNumberFormat clase como argumento a un método que proporciona servicios de formato o análisis. Por ejemplo, el código siguiente pasa una AcctNumberFormat clase al String.Format(IFormatProvider, String, Object[]) método para generar un número de cuenta con formato de 12 dígitos.

C#
using System;
using System.Globalization;

public enum DaysOfWeek { Monday=1, Tuesday=2 };

public class TestFormatting
{
   public static void Main()
   {
      long acctNumber;
      double balance;
      DaysOfWeek wday;
      string output;

      acctNumber = 104254567890;
      balance = 16.34;
      wday = DaysOfWeek.Monday;

      output = String.Format(new AcctNumberFormat(),
                             "On {2}, the balance of account {0:H} was {1:C2}.",
                             acctNumber, balance, wday);
      Console.WriteLine(output);

      wday = DaysOfWeek.Tuesday;
      output = String.Format(new AcctNumberFormat(),
                             "On {2}, the balance of account {0:I} was {1:C2}.",
                             acctNumber, balance, wday);
      Console.WriteLine(output);
   }
}
// The example displays the following output:
//       On Monday, the balance of account 10425-456-7890 was $16.34.
//       On Tuesday, the balance of account 104254567890 was $16.34.

Comentarios

GetFormat es un método de devolución de llamada que los métodos de formato y análisis invocan para recuperar información sobre el formato de la cadena de entrada en las operaciones de análisis o el formato de la cadena de salida en las operaciones de formato. En el formatType parámetro , el método de formato o análisis pasa el tipo de objeto que requiere para realizar su operación. Si la IFormatProvider implementación puede proporcionar este formato o objeto de análisis, devuelve ese objeto. Si no es así, devuelve null.

Por ejemplo, en la llamada al Int32.ToString(IFormatProvider) método , el argumento method es un IFormatProvider objeto que proporciona información sobre cómo se puede dar formato a la representación de cadena de la instancia de entero actual. Cuando el tiempo de ejecución ejecuta el método , llama al IFormatProvider método del GetFormat objeto y lo pasa un Type objeto que representa el NumberFormatInfo tipo. Si el IFormatProvider objeto puede proporcionar un NumberFormatInfo objeto , devuelve ese objeto. Si no puede proporcionar un objeto de ese tipo, devuelve null.

Puede implementar la IFormatProvider interfaz y el GetFormat método en clases que proporcionan servicios personalizados de formato o análisis. A continuación, la IFormatProvider implementación se pasa como argumento a cualquier sobrecarga de un método de análisis o formato que tenga un parámetro de tipo IFormatProvider, como String.Format(IFormatProvider, String, Object[]), Int32.ToString(String, IFormatProvider)o DateTime.Parse(String, IFormatProvider).

Se aplica a

Produto Versións
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0