|
Cet article a fait l'objet d'une traduction automatique. Déplacez votre pointeur sur les phrases de l'article pour voir la version originale de ce texte. Informations supplémentaires.
|
Traduction
Source
|
Comment : définir et utiliser des fournisseurs de format numérique personnalisés
-
Chaînes de format numériques standard, qui fournissent un ensemble prédéfini de formats de conversion des nombres en leur représentation sous forme de chaîne. Vous pouvez les utiliser avec toute numérique mise en forme de méthode, telle que Decimal.ToString(String), qui a un format paramètre. Pour plus d'informations, consultez Chaînes de format numériques standard. -
Chaînes de format numériques personnalisées, qui fournissent un jeu de symboles qui peuvent être combinés pour définir des spécificateurs de format numérique personnalisé. Ils peuvent également être utilisés avec n'importe quel numérique mise en forme de méthode, telle que Decimal.ToString(String), qui a un format paramètre. Pour plus d'informations, consultez Chaînes de format numériques personnalisées. -
Personnalisé [.CultureInfo] ou [:System.Globalization.NumberFormatInfo] objets qui définissent les symboles et modèles utilisés pour afficher les représentations sous forme de chaîne de valeurs numériques de format. Vous pouvez les utiliser avec toute numérique mise en forme de méthode, telle que ToString, qui a un fournisseur paramètre. En règle générale, le fournisseur paramètre est utilisé pour spécifier la mise en forme spécifiques à la culture.
Pour définir un fournisseur de format personnalisé
-
Définissez une classe qui implémente le IFormatProvider et ICustomFormatter interfaces. -
Mettre en œuvre le [.GetFormat(System.Type)] méthode. [.GetFormat(System.Type)] est une méthode de rappel que la méthode de mise en forme (telle que la String.Format(IFormatProvider, String, Object[]) méthode) appelle pour récupérer l'objet qui est réellement chargé d'effectuer la mise en forme personnalisée. Une implémentation typique de [.GetFormat(System.Type)] effectue les opérations suivantes : -
Détermine si le type objet passé en tant que méthode paramètre représente un ICustomFormatter interface. -
Si le paramètre ne représente pas la ICustomFormatter interface, [.GetFormat(System.Type)] Renvoie un objet qui implémente le ICustomFormatter interface qui est chargé de fournir la mise en forme personnalisée. En règle générale, l'objet de mise en forme personnalisée se retourne elle-même. -
Si le paramètre ne représente pas la ICustomFormatter interface, [.GetFormat(System.Type)] Retourne null.
-
-
Mettre en œuvre le Format méthode. Cette méthode est appelée par le String.Format(IFormatProvider, String, Object[]) méthode et est chargée de retourner la représentation sous forme de chaîne d'un nombre. Implémentation de la méthode généralement implique les tâches suivantes : -
Le cas échéant, assurez-vous que la méthode est légitimement destinée à fournir des services de mise en forme en examinant la fournisseur paramètre. Pour mettre en forme des objets qui implémentent les deux IFormatProvider et ICustomFormatter, vous devez tester le fournisseur égalité avec l'objet en cours de mise en forme du paramètre. -
Déterminez si l'objet de mise en forme doit prendre en charge des spécificateurs de format personnalisés. (Par exemple, un "N" spécificateur de format peut indiquer que U.S. numéro de téléphone doit être sortie au format NANP et un « I » peut indiquer une sortie au format ITU-T Recommendation E.123.) Si les spécificateurs de format sont utilisés, la méthode doit gérer le spécificateur de format spécifique. Il est passé à la méthode dans le format paramètre. Si aucun spécificateur n'est présent, la valeur de la format le paramètre est [.Empty]. -
Récupérer la valeur numérique passée à la méthode en tant que le arg paramètre. Effectuez les opérations requises pour le convertir en sa représentation sous forme de chaîne. -
Retourner la représentation sous forme de chaîne de la arg paramètre.
-
Pour utiliser un objet de mise en forme numérique personnalisé
-
Créer une nouvelle instance de la classe de mise en forme personnalisée. -
Appelez le String.Format(IFormatProvider, String, Object[]) méthode de mise en forme, en lui passant l'objet de mise en forme personnalisée, le spécificateur de mise en forme (ou [.Empty]Si elle n'est pas utilisée) et la valeur numérique à mettre en forme.
using System; using System.Globalization; public class TelephoneFormatter : IFormatProvider, ICustomFormatter { public object GetFormat(Type formatType) { if (formatType == typeof(ICustomFormatter)) return this; else return null; } public string Format(string format, object arg, IFormatProvider formatProvider) { // Check whether this is an appropriate callback if (! this.Equals(formatProvider)) return null; // Set default format specifier if (string.IsNullOrEmpty(format)) format = "N"; string numericString = arg.ToString(); if (format == "N") { if (numericString.Length <= 4) return numericString; else if (numericString.Length == 7) return numericString.Substring(0, 3) + "-" + numericString.Substring(3, 4); else if (numericString.Length == 10) return "(" + numericString.Substring(0, 3) + ") " + numericString.Substring(3, 3) + "-" + numericString.Substring(6); else throw new FormatException( string.Format("'{0}' cannot be used to format {1}.", format, arg.ToString())); } else if (format == "I") { if (numericString.Length < 10) throw new FormatException(string.Format("{0} does not have 10 digits.", arg.ToString())); else numericString = "+1 " + numericString.Substring(0, 3) + " " + numericString.Substring(3, 3) + " " + numericString.Substring(6); } else { throw new FormatException(string.Format("The {0} format specifier is invalid.", format)); } return numericString; } } public class TestTelephoneFormatter { public static void Main() { Console.WriteLine(String.Format(new TelephoneFormatter(), "{0}", 0)); Console.WriteLine(String.Format(new TelephoneFormatter(), "{0}", 911)); Console.WriteLine(String.Format(new TelephoneFormatter(), "{0}", 8490216)); Console.WriteLine(String.Format(new TelephoneFormatter(), "{0}", 4257884748)); Console.WriteLine(String.Format(new TelephoneFormatter(), "{0:N}", 0)); Console.WriteLine(String.Format(new TelephoneFormatter(), "{0:N}", 911)); Console.WriteLine(String.Format(new TelephoneFormatter(), "{0:N}", 8490216)); Console.WriteLine(String.Format(new TelephoneFormatter(), "{0:N}", 4257884748)); Console.WriteLine(String.Format(new TelephoneFormatter(), "{0:I}", 4257884748)); } }