Domanda

Sto usando inglese di Visual Studio 2008 su Windows 7 inglese, ma sto sede nei Paesi Bassi. Molti dei miei programmi hanno bisogno di leggere e scrivere i numeri in virgola mobile. Rispetto al inglese, la notazione olandese dei numeri cambia il significato di punti e virgola di (vale a dire 1.001 in olandese è una mille e una, e 1.001 è 1 + 1/1000). Non potrò mai mai mai dovuto scrivere (o leggere) i numeri in formato olandese, ma per qualche motivo, ogni programma che ho compilarlo default ad esso, in modo che ogni ToString () è sbagliato. Questo mi fa ogni volta. So che posso mettere questo all'inizio di ogni discussione:

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

o sostituire ogni istanza di ToString () con:

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

Ma a volte voglio solo compilare qualcosa per vedere come funziona, e non apportare alcuna modifica. Inoltre, sono costretto a dimenticare questo a volte. Non c'è modo per dire basta C #, .NET e / o Visual Studio a poco sempre fare tutti i miei progetti / programmi utilizzano il formato numerico inglese?

È stato utile?

Soluzione

Non è una questione di compilation - è una questione di ciò che accade a esecuzione di tempo. A meno che non si specifica in modo esplicito una cultura, la cultura corrente (in fase di esecuzione) verrà utilizzato. Non c'è modo di cambiare questo comportamento, che io sappia, che ti lascia le opzioni:

  • affermando esplicitamente la cultura da usare
  • esplicitamente cambiare la cultura attuale

Si noti che anche se si cambia la cultura corrente del corrente filo, che non può influenzare le cose come il pool di thread. Personalmente penso che sia meglio utilizzare sempre la cultura in modo esplicito.

Si può sempre scrivere i propri metodi di estensione a (diciamo) chiamare la versione originale, ma che passano in CultureInfo.InvariantCulture. Ad esempio:

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

Come tale diritto in tutto il mondo potrebbe essere un dolore, è vero ... e per evitare di boxe che ci si vuole realmente una firma leggermente diversa:

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

Altri suggerimenti

È possibile aggiungere una riga che imposta CurrentCulture a Program.cs nei tuoi modelli di progetto.

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top