Question

Comment pensez-vous qu'il est vraiment nécessaire de fournir IFormatProvider dans la méthode String.Format (chaîne, objet) ?

Est-il préférable d'écrire la variante complète

String.Format(CultureInfo.CurrentCulture, "String is {0}", str);

ou juste

String.Format("String is {0}", str);

?

Était-ce utile?

La solution

En général, vous souhaiterez utiliser InvariantCulture si la chaîne que vous générez doit être conservée de manière indépendante de la culture de l'utilisateur actuel (dans le registre ou dans un fichier, par exemple).

Vous voudrez utiliser CurrentCulture pour les chaînes qui doivent être présentées dans l'interface utilisateur à l'utilisateur actuel (formulaires, rapports).

Des bogues subtils peuvent survenir si vous utilisez CurrentCulture, où vous devriez utiliser InvariantCulture: bogues apparaissant uniquement lorsque plusieurs utilisateurs de cultures différentes accèdent à la même entrée de registre ou au même fichier, ou si un utilisateur modifie sa culture par défaut.

La spécification explicite de CurrentCulture (valeur par défaut si l'argument IFormatProvider est omis) est essentiellement une documentation qui montre que vous avez pris en compte ce qui précède et que la chaîne générée doit utiliser la culture de l'utilisateur actuel. C'est pourquoi FxCop vous recommande de spécifier l'argument IFormatProvider.

Autres conseils

Si vous ne spécifiez pas le IFormatProvider (ou transmettez de manière équivalente null ), la plupart des types d'argument finiront par être formatés conformément à CultureInfo.CurrentCulture . Ce qui est intéressant, c’est que vous pouvez spécifier un IFormatProvider personnalisé pouvant commencer à craquer lors du formatage des arguments, ou remplacer la culture de formatage en fonction d’un autre contexte.

Notez que CultureInfo.CurrentCulture affecte le formatage des arguments, pas la sélection des ressources. la sélection des ressources est contrôlée par CultureInfo.CurrentUICulture .

Non, vous n'avez pas besoin de spécifier la culture, sauf si votre chaîne contient des éléments spécifiques à la culture, tels que des séparateurs décimaux, la devise, etc., qui doivent être restitués en fonction de la culture.

Cela est particulièrement utile si vous vous souciez de la localisation (Globalisation) dans votre application. Autrement dit, si vous souhaitez que votre application prenne en charge plusieurs formats de langues et de cultures spécifiques, utilisez-la.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top