Quand devrais-je spécifier la courrure actuelle ou invariante et quand dois-je le laisser non spécifié?

StackOverflow https://stackoverflow.com/questions/3231386

Question

Quelle est la meilleure pratique pour spécifier la culture actuelle ou invariante et ne pas préciser la culture du tout?

D'après ce que j'ai lu, si vous faites la sérialisation, par exemple, vous avez besoin d'invariantCulture comme moyen de spécifier une représentation canonique d'une valeur de données.C'est un pourcentage relativement faible de manipulations de cordes à base de culture.

Je trouve cela long, verbeux et laide la plupart du temps pour la spécifier à chaque fois que je fais, disons:

var greeting = string.Format(CultureInfo.CurrentCulture, "Hello ", userName); 

Cependant, mon équipe a récemment transformé FXCop sur et maintenant, il y a une poussée pour toujours utiliser CultureInfo partout.Quelle est la meilleure technique pour combiner la brièveté, la lisibilité et la fonctionnalité?

Quelques matériaux de lecture:

Était-ce utile?

La solution

Il y a un compromis inhérent au jeu ici.

Au minimum, vous voudrez spécifier le cultureInfo pour utiliser invariantCulture chaque fois que vous faites quelque chose de interne dans votre programme. Par exemple, l'utilisation de cela avec la série de sérialisation, la représentation des données doit toujours être identique, de sorte que vous n'avez pas à vous soucier des problèmes d'internationalisation avec vos formats de données internes.

Cela étant dit, la spécification de cela partout a des avantages - principalement en termes de forçage de vous pour vous assurer de la gestion correctement. Le travail de programme interne par rapport au travail de l'UI doit avoir une culture différente spécifiée (à condition que vous souhaitiez localiser correctement votre application). En conséquence, un programme complexe a tendance à exiger que cela soit spécifié partout, car le départ du "défaut" est au mieux dangereux et tend à introduire des bugs au fil du temps.

Cependant, spécifiez cela, comme vous l'avez remarqué, tendance à augmenter la taille de votre code et à réduire potentiellement la lisibilité. Cela conduit au compromis - la lisibilité et la main-d'œuvre via un code plus court vs. L'internationalisation et la localisation appropriées et la maintenabilité via d'être plus explicites partout.

À mon avis, il n'y a pas de réponse "droite" ici - cela dépend vraiment de votre application. Si votre application est totalement sur la présentation, et ne faites pas beaucoup de manipulation de données, surtout avec aucun type de stockage de fichiers autogéré, définissez une fois la culture actuelle (et la culture d'assurance-emploi). J'ai découvert que des applications plus compliquées ont tendance à ne pas fonctionner aussi bien de cette manière, cependant, auquel cas les suggestions FXCOP de la spécifier partout semblent plus attrayantes.

Autres conseils

La valeur par défaut est déjà la culture actuelle comme initialisée par Windows.Ainsi, à l'aide de la cultureInfo.CurrentCulture explicite explicitement est juste une perte de temps.Tout format de sérialisation décent (y compris la sérialisation binaire et la sérialisation XML) Serialisera une date de données de manière invariante de culture.

Utiliser une culture qui n'est pas la valeur par défaut est très dangereuse.Un thread sera toujours démarré avec la culture par défaut comme spécifié par Windows et configuré par l'utilisateur lorsqu'elle a installé Windows..NET démarre le threadpool threads tout le temps et vous risquerez d'obtenir une culture dans ce fil différent de votre fil principal.Qui peut causer toutes sortes de problèmes subtils.Comme avoir une condition tirée qui n'est plus triée.

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