Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Metodo IFormatProvider.GetFormat (Type)

 

Data di pubblicazione: ottobre 2016

Restituisce un oggetto che fornisce servizi di formattazione per il tipo specificato.

Spazio dei nomi:   System
Assembly:  mscorlib (in mscorlib.dll)

object GetFormat(
	Type formatType
)

Parametri

formatType
Type: System.Type

Oggetto che specifica il tipo di oggetto format da restituire.

Valore restituito

Type: System.Object

Un'istanza dell'oggetto specificato da formatType, se il IFormatProvider implementazione può fornire tale tipo di oggetto; in caso contrario, null.

GetFormatè un metodo di callback che richiamano la formattazione e analisi di metodi per recuperare informazioni sul formato della stringa di input in operazioni di analisi o il formato della stringa di output nelle operazioni di formattazione. Nel formatType parametro, la formattazione o l'analisi del metodo passa il tipo di oggetto di cui necessita per eseguire l'operazione. Se il IFormatProvider implementazione può fornire questo formattazione o analisi di oggetti, restituisce l'oggetto. Se non viene restituito null.

Ad esempio, nella chiamata al Int32.ToString(IFormatProvider) metodo, l'argomento del metodo è un IFormatProvider oggetto che fornisce informazioni su come la rappresentazione di stringa dell'istanza corrente di integer potrebbe essere formattata. Quando il runtime esegue il metodo, chiama il IFormatProvider dell'oggetto GetFormat metodo e passa un Type oggetto che rappresenta il NumberFormatInfo tipo. Se il IFormatProvider oggetto può fornire un NumberFormatInfo dell'oggetto, restituisce l'oggetto. Se non può fornire un oggetto di tale tipo, restituisce null.

È possibile implementare il IFormatProvider interfaccia e GetFormat metodo nelle classi che forniscono formattazione o analisi di servizi personalizzati. il IFormatProvider implementazione viene quindi passata come argomento a qualsiasi overload di un tipo di analisi o formattazione metodo che presenta un parametro di tipo IFormatProvider, ad esempio String.Format(IFormatProvider, String, Object[]), Int32.ToString(String, IFormatProvider), o DateTime.Parse(String, IFormatProvider).

Nell'esempio seguente viene illustrato l'utilizzo di una classe che implementa il IFormatProvider interfaccia e GetFormat metodo. Il AcctNumberFormat classe converte un Int64 valore che rappresenta un numero di conto in un numero di account a 12 cifre formattato. Il relativo GetFormat metodo restituisce un riferimento a se stessa se il formatType parametro fa riferimento a una classe che implementa ICustomFormatter; in caso contrario, GetFormat restituisce null.

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;
   }
}

Un'istanza di AcctNumberFormat classe può quindi essere passata come argomento a un metodo che fornisce formattazione o analisi di servizi. Ad esempio, il codice seguente passa un AcctNumberFormat classe per il String.Format(IFormatProvider, String, Object[]) metodo per generare un numero di account a 12 cifre formattato.

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.

Universal Windows Platform
Disponibile da 8
.NET Framework
Disponibile da 1.1
Libreria di classi portabile
Supportato in: piattaforme .NET portabili
Silverlight
Disponibile da 2.0
Windows Phone Silverlight
Disponibile da 7.0
Windows Phone
Disponibile da 8.1
Torna all'inizio
Mostra: