2010-10-25 9 views
1

J'utilise Visual Studio 2008 sur Windows 7 en anglais, mais je suis basé aux Pays-Bas. Beaucoup de mes programmes ont besoin de lire et d'écrire des nombres à virgule flottante. Par rapport à l'anglais, la notation néerlandaise des nombres change la signification des points et des virgules (c'est-à-dire 1.001 en néerlandais est un mille et un, et 1.001 est 1 + 1/1000). Je ne serai jamais obligé d'écrire (ou de lire) des nombres au format hollandais, mais pour une raison quelconque, tous les programmes que je compile lui sont par défaut, donc chaque ToString() est faux. Cela m'amène à chaque fois. Je sais que je peux mettre cela au début de chaque fil:Comment faire en C# écrire le format de numéro anglais (non-localisé) par défaut?

System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture("en-US"); 

Ou remplacer toutes les occurrences de ToString() avec:

String.Format(CultureInfo.InvariantCulture, "{0:0.####},{1:0.####}", x) 

Mais parfois, je veux juste compiler quelque chose pour voir comment cela fonctionne , et ne fait aucun changement. Aussi, je suis obligé d'oublier cela parfois. Est-ce qu'il n'y a aucun moyen de simplement dire à C#, .NET et/ou Visual Studio de toujours faire en sorte que tous mes projets/programmes utilisent le format numérique anglais?

+0

Qu'est-ce qui ne va pas avec l'écriture de ToString (CultureInfo.InvariantCulture)? –

+0

Ce n'est pas concis (ne peut pas non plus être utilisé avec "examplestr" +1.0, conversion de chaîne automatique), je vais parfois l'oublier et d'autres ont déjà oublié de l'utiliser dans le code que je vais utiliser. – Jordi

Répondre

5

Ce n'est pas une question de compilation - c'est une question de ce qui se passe à l'exécution temps. Sauf si vous spécifiez explicitement une culture, la culture actuelle (au moment de l'exécution) sera utilisée. Il n'y a aucun moyen de changer ce comportement que je suis au courant, ce qui vous laisse les options suivantes:

  • indiquant clairement la culture à utiliser
  • changer Explicitement la culture actuelle

Notez que même Si vous modifiez la culture actuelle du thread actuel, cela peut ne pas affecter des choses comme le pool de threads. Personnellement, je pense qu'il est préférable de toujours utiliser la culture explicitement.

Vous pouvez toujours écrire vos propres méthodes d'extension pour (par exemple) appeler la version originale mais en passant dans CultureInfo.InvariantCulture. Par exemple:

public static string ToInvariantString(this IFormattable source, string format) 
{ 
    return source.Format(format, CultureInfo.InvariantCulture); 
} 

Faire passer ce droit partout pourrait être une douleur, il est vrai ... et pour éviter la boxe vous voulez vraiment voulez une signature légèrement différente:

public static string ToInvariantString<T>(this T source, string format) 
    where T : IFormattable 
{ 
    return source.Format(format, CultureInfo.InvariantCulture); 
} 
+1

Shoud pas être les méthodes d'extension 'static'? –

+0

@Desolator: Oui, désolé - corrigé maintenant. –

1

Vous pouvez ajouter une ligne qui définit CurrentCulture à Program.cs dans vos modèles de projet.

-1

Essayez: Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;

+0

Si le format Windows n'est pas un nombre en anglais, cela ne fonctionnera pas –