System.Globalization.CultureInfo.InvariantCulture-Eigenschaft

Dieser Artikel enthält ergänzende Hinweise zur Referenzdokumentation für diese API.

Die invariante Kultur ist kulturunempfindlich; sie ist mit der englischen Sprache verknüpft, aber nicht mit einem Land/einer Region. Sie geben die invariante Kultur anhand des Namens mithilfe einer leeren Zeichenfolge ("") im Aufruf einer CultureInfo Instanziierungsmethode an. Diese Eigenschaft CultureInfo.InvariantCultureruft auch eine Instanz der invarianten Kultur ab. Sie kann in fast jeder Methode im System.Globalization Namespace verwendet werden, die eine Kultur erfordert. Die von Eigenschaften wie CompareInfo, DateTimeFormat, und auch die Zeichenfolgenvergleichs NumberFormat - und Formatierungskonventionen der invarianten Kultur zurückgegebenen Objekte.

Im Gegensatz zu kultursensiblen Daten, die durch Benutzeranpassungen oder Durch Aktualisierungen des .NET Framework oder des Betriebssystems geändert werden können, sind invariante Kulturdaten im Laufe der Zeit und in allen installierten Kulturen stabil und können nicht von Benutzern angepasst werden. Dies macht die invariante Kultur besonders nützlich für Vorgänge, die kulturunabhängige Ergebnisse erfordern, z. B. Formatierungs- und Analysevorgänge, die formatierte Daten beibehalten, oder Sortier- und Sortiervorgänge, die erfordern, dass Daten unabhängig von der Kultur in einer festen Reihenfolge angezeigt werden.

Zeichenfolgenvorgänge

Sie können die invariante Kulturkultur für kultursensitive Zeichenfolgenvorgänge verwenden, die nicht von den Konventionen der aktuellen Kultur betroffen sind und die in allen Kulturen konsistent sind. So möchten Sie z. B. sortierte Daten in einer festen Reihenfolge anzeigen oder einen Standardsatz von Groß-/Kleinschreibungskonventionen unabhängig von der aktuellen Kultur auf Zeichenfolgen anwenden. Dazu übergeben Sie das InvariantCulture Objekt an eine Methode, die einen CultureInfo Parameter aufweist, z Compare(String, String, Boolean, CultureInfo) . B. und ToUpper(CultureInfo).

Speichern von Daten

Die InvariantCulture Eigenschaft kann verwendet werden, um Daten in einem kulturunabhängigen Format zu speichern. Dies stellt ein bekanntes Format bereit, das sich nicht ändert und zum Serialisieren und Deserialisieren von Daten in verschiedenen Kulturen verwendet werden kann. Nachdem die Daten deserialisiert wurden, kann sie entsprechend basierend auf den kulturellen Konventionen des aktuellen Benutzers formatiert werden.

Wenn Sie beispielsweise Datums- und Uhrzeitdaten in Zeichenfolgenform beibehalten möchten, können Sie das InvariantCulture Objekt an die DateTime.ToString(String, IFormatProvider) oder DateTimeOffset.ToString(IFormatProvider) die Methode übergeben, um die Zeichenfolge zu erstellen, und Sie können das InvariantCulture Objekt an die DateTime.Parse(String, IFormatProvider) oder DateTimeOffset.Parse(String, IFormatProvider, DateTimeStyles) die Methode übergeben, um die Zeichenfolge wieder in einen Datums- und Uhrzeitwert zu konvertieren. Diese Technik stellt sicher, dass sich die zugrunde liegenden Datums- und Uhrzeitwerte nicht ändern, wenn die Daten von Benutzern aus verschiedenen Kulturen gelesen oder geschrieben werden.

Im folgenden Beispiel wird die invariante Kultur verwendet, um einen DateTime Wert als Zeichenfolge beizubehalten. Anschließend analysiert sie die Zeichenfolge und zeigt ihren Wert mithilfe der Formatierungskonventionen der Kulturen Französisch (Frankreich) und Deutsch (Deutschland) an.

using System;
using System.IO;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      // Persist the date and time data.
      StreamWriter sw = new StreamWriter(@".\DateData.dat");

      // Create a DateTime value.
      DateTime dtIn = DateTime.Now;
      // Retrieve a CultureInfo object.
      CultureInfo invC = CultureInfo.InvariantCulture;

      // Convert the date to a string and write it to a file.
      sw.WriteLine(dtIn.ToString("r", invC));
      sw.Close();

      // Restore the date and time data.
      StreamReader sr = new StreamReader(@".\DateData.dat");
      String input;
      while ((input = sr.ReadLine()) != null)
      {
         Console.WriteLine("Stored data: {0}\n" , input);

         // Parse the stored string.
         DateTime dtOut = DateTime.Parse(input, invC, DateTimeStyles.RoundtripKind);

         // Create a French (France) CultureInfo object.
         CultureInfo frFr = new CultureInfo("fr-FR");
         // Displays the date formatted for the "fr-FR" culture.
         Console.WriteLine("Date formatted for the {0} culture: {1}" ,
                           frFr.Name, dtOut.ToString("f", frFr));

         // Creates a German (Germany) CultureInfo object.
         CultureInfo deDe= new CultureInfo("de-De");
         // Displays the date formatted for the "de-DE" culture.
         Console.WriteLine("Date formatted for {0} culture: {1}" ,
                           deDe.Name, dtOut.ToString("f", deDe));
      }
      sr.Close();
   }
}
// The example displays the following output:
//    Stored data: Tue, 15 May 2012 16:34:16 GMT
//
//    Date formatted for the fr-FR culture: mardi 15 mai 2012 16:34
//    Date formatted for de-DE culture: Dienstag, 15. Mai 2012 16:34
Imports System.Globalization
Imports System.IO

Module Example
   Public Sub Main()
      ' Persist the date and time data.
      Dim sw As New StreamWriter(".\DateData.dat")
      
      ' Create a DateTime value.      
      Dim dtIn As DateTime = DateTime.Now
      ' Retrieve a CultureInfo object.
      Dim invC As CultureInfo = CultureInfo.InvariantCulture
      
      ' Convert the date to a string and write it to a file.
      sw.WriteLine(dtIn.ToString("r", invC))
      sw.Close()

      ' Restore the date and time data.
      Dim sr As New StreamReader(".\DateData.dat")
      Dim input As String = String.Empty
      Do While sr.Peek() >= 0 
         input = sr.ReadLine()
         Console.WriteLine("Stored data: {0}" , input)    
         Console.WriteLine()
         
         ' Parse the stored string.
         Dim dtOut As DateTime = DateTime.Parse(input, invC, DateTimeStyles.RoundtripKind)

         ' Create a French (France) CultureInfo object.
         Dim frFr As New CultureInfo("fr-FR")
         ' Displays the date formatted for the "fr-FR" culture.
         Console.WriteLine("Date formatted for the {0} culture: {1}" , 
                           frFr.Name, dtOut.ToString("f", frFr))

         ' Creates a German (Germany) CultureInfo object.
         Dim deDe As New CultureInfo("de-De")
         ' Displays the date formatted for the "de-DE" culture.
         Console.WriteLine("Date formatted for {0} culture: {1}" , 
                           deDe.Name, dtOut.ToString("f", deDe))
      Loop
      sr.Close()
   End Sub
End Module
' The example displays the following output:
'    Stored data: Tue, 15 May 2012 16:34:16 GMT
'    
'    Date formatted for the fr-FR culture: mardi 15 mai 2012 16:34
'    Date formatted for de-DE culture: Dienstag, 15. Mai 2012 16:34

Sicherheitsentscheidungen

Wenn Sie eine Sicherheitsentscheidung treffen (z. B. ob der Zugriff auf eine Systemressource erlaubt wird), basierend auf dem Ergebnis eines Zeichenfolgenvergleichs oder einer Falländerung, sollten Sie die invariante Kultur nicht verwenden. Stattdessen sollten Sie einen Vergleich zwischen Groß- und Kleinschreibung oder Groß-/Kleinschreibung durchführen, indem Sie eine Methode aufrufen, die einen StringComparison Parameter enthält und entweder StringComparison.Ordinal oder StringComparison.OrdinalIgnoreCase als Argument bereitgestellt wird. Code, der Kultursensible Zeichenfolgenvorgänge ausführt, kann Zu Sicherheitsrisiken führen, wenn die aktuelle Kultur geändert wird oder wenn sich die Kultur auf dem Computer, auf dem der Code ausgeführt wird, von der Kultur unterscheidet, die zum Testen des Codes verwendet wird. Im Gegensatz dazu hängt ein Ordinalvergleich ausschließlich vom Binären Wert der verglichenen Zeichen ab.