CultureInfo.InvariantCulture Właściwość

Definicja

Pobiera CultureInfo obiekt, który jest niezależny od kultury (niezmienny).

public:
 static property System::Globalization::CultureInfo ^ InvariantCulture { System::Globalization::CultureInfo ^ get(); };
public static System.Globalization.CultureInfo InvariantCulture { get; }
member this.InvariantCulture : System.Globalization.CultureInfo
Public Shared ReadOnly Property InvariantCulture As CultureInfo

Wartość właściwości

CultureInfo

Obiekt niezależny od kultury (niezmienny).

Uwagi

Niezmienna kultura nie jest wrażliwa na kulturę; Jest ona skojarzona z językiem angielskim, ale nie z żadnym kraju/regionem. Niezmienną kulturę określa się według nazwy, używając pustego ciągu ("") w wywołaniu metody CultureInfo wystąpienia. CultureInfo.InvariantCulture Pobiera również wystąpienie niezmiennej kultury. Można go używać w niemal dowolnej metodzie w przestrzeni System.Globalization nazw, która wymaga kultury. Obiekty zwracane przez właściwości, takie jak , , a także odzwierciedlają porównania ciągów i konwencje formatowania CompareInfo DateTimeFormat NumberFormat niezmiennej kultury.

W przeciwieństwie do danych ważnych dla kultury, które mogą ulec zmianie przez dostosowanie użytkownika lub aktualizacje systemu .NET Framework lub systemu operacyjnego, niezmienne dane kultury są stabilne w czasie i we wszystkich zainstalowanych kulturach i nie mogą być dostosowywane przez użytkowników. Dzięki temu niezmienna kultura jest szczególnie przydatna w przypadku operacji, które wymagają wyników niezależnych od kultury, takich jak operacje formatowania i analizowania, które utrwalają sformatowane dane, lub operacje sortowania i porządkowania, które wymagają, aby dane były wyświetlane w stałej kolejności niezależnie od kultury.

Operacje na ciągach

Niezmiennej kultury można używać w przypadku operacji na ciągach ważnych dla kultury, na które nie mają wpływu konwencje bieżącej kultury i które są spójne w różnych kulturach. Możesz na przykład chcieć, aby posortowane dane pojawiały się w stałej kolejności, lub zastosować standardowy zestaw konwencji wielkości znaków do ciągów niezależnie od bieżącej kultury. W tym celu należy przekazać InvariantCulture obiekt do metody, która ma CultureInfo parametr, taki jak i Compare(String, String, Boolean, CultureInfo) ToUpper(CultureInfo) .

Utrwalanie danych

Właściwość InvariantCulture może służyć do utrwalania danych w formacie niezależnym od kultury. Zapewnia to znany format, który nie zmienia się i który może służyć do serializacji i deserializować dane między kulturami. Po deserializacji danych można je odpowiednio sformatować na podstawie konwencji kulturowych bieżącego użytkownika.

Jeśli na przykład zdecydujesz się utrwalić dane daty i czasu w postaci ciągu, możesz przekazać obiekt do metody lub w celu utworzenia ciągu i przekazać obiekt do metody lub , aby przekonwertować ciąg z powrotem na wartość daty InvariantCulture DateTime.ToString(String, IFormatProvider) i DateTimeOffset.ToString(IFormatProvider) InvariantCulture DateTime.Parse(String, IFormatProvider) DateTimeOffset.Parse(String, IFormatProvider, DateTimeStyles) czasu. Ta technika zapewnia, że bazowe wartości daty i czasu nie zmieniają się, gdy dane są odczytywane lub zapisywane przez użytkowników z różnych kultur.

W poniższym przykładzie użyto niezmiennej kultury, aby utrwalić DateTime wartość jako ciąg. Następnie analizuje ciąg i wyświetla jego wartość przy użyciu konwencji formatowania kultur francuski (Francja) i niemiecki (Niemcy).

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

Decyzje dotyczące bezpieczeństwa

W przypadku podejmowania decyzji dotyczącej zabezpieczeń (na przykład zezwalania na dostęp do zasobu systemu) na podstawie wyniku porównania ciągów lub zmiany przypadku nie należy używać niezmiennej kultury. Zamiast tego należy wykonać porównanie porządkowe z rozróżnianą wielkością liter lub bez uwzględniania wielkości liter, wywołując metodę, która zawiera parametr i poda wartość lub jako StringComparison StringComparison.Ordinal StringComparison.OrdinalIgnoreCase argument. Kod, który wykonuje operacje na ciągach wrażliwych na ustawienia kulturowe, może spowodować luki w zabezpieczeniach, jeśli bieżąca kultura zostanie zmieniona lub jeśli kultura na komputerze, na których jest uruchomiony kod, różni się od kultury używanej do testowania kodu. Z kolei porównanie porządkowe zależy wyłącznie od wartości binarnej porównywanych znaków.

Dotyczy

Zobacz też