CultureInfo.InvariantCulture Właściwość

Definicja

CultureInfo Pobiera obiekt 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, który jest niezależny od kultury (niezmienny).

Uwagi

Niezmienna kultura jest niewrażliwa na kulturę; jest on skojarzony z językiem angielskim, ale nie z żadnym krajem/regionem. W wywołaniu metody tworzenia wystąpienia należy określić niezmienną kulturę według nazwy przy użyciu pustego CultureInfo ciągu (""). CultureInfo.InvariantCulture pobiera również wystąpienie niezmiennej kultury. Można go używać w niemal dowolnej metodzie w System.Globalization przestrzeni nazw, która wymaga kultury. Obiekty zwracane przez właściwości, takie jak CompareInfo, DateTimeFormat, i NumberFormat odzwierciedlają również konwencje porównywania i formatowania ciągów niezmiennej kultury.

W przeciwieństwie do danych wrażliwych na kulturę, które podlegają zmianie przez dostosowanie użytkownika lub aktualizacje .NET Framework lub systemu operacyjnego, niezmienne dane kultury są stabilne w czasie i w różnych kulturach zainstalowanych i nie mogą być dostosowywane przez użytkowników. Dzięki temu niezmienna kultura jest szczególnie przydatna w przypadku operacji wymagających 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ą wyświetlania danych w stałej kolejności niezależnie od kultury.

Operacje na ciągach

Niezmienną kulturę można używać w przypadku operacji ciągów wrażliwych na kulturę, które nie mają wpływu na konwencje bieżącej kultury i które są spójne w różnych kulturach. Na przykład możesz chcieć, aby posortowane dane pojawiły się w stałej kolejności lub zastosować standardowy zestaw konwencji wielkości liter do ciągów niezależnie od bieżącej kultury. W tym celu należy przekazać InvariantCulture obiekt do metody zawierającej CultureInfo parametr, taki jak Compare(String, String, Boolean, CultureInfo) i 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 deserializacji danych 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 godziny w postaci ciągu, możesz przekazać InvariantCulture obiekt do DateTime.ToString(String, IFormatProvider) metody lub w celu utworzenia ciągu i przekazać InvariantCulture obiekt do DateTime.Parse(String, IFormatProvider) metody lub DateTimeOffset.ToString(IFormatProvider) DateTimeOffset.Parse(String, IFormatProvider, DateTimeStyles), aby przekonwertować ciąg z powrotem na wartość daty i godziny. Ta technika zapewnia, że bazowe wartości daty i godziny 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 do utrwalania DateTime wartości jako ciągu. Następnie analizuje ciąg i wyświetla jego wartość przy użyciu konwencji formatowania kultur francuskich (Francuskich) i Niemieckich (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

Jeśli podejmujesz decyzję dotyczącą zabezpieczeń (np. czy zezwolić na dostęp do zasobu systemowego) na podstawie wyniku porównania ciągów lub zmiany wielkości liter, nie należy używać niezmiennej kultury. Zamiast tego należy wykonać porównanie porządkowe uwzględniające wielkość liter lub wielkość liter, wywołując metodę StringComparison zawierającą parametr i podając StringComparison.Ordinal argument lub StringComparison.OrdinalIgnoreCase jako argument. Kod wykonujący operacje ciągów wrażliwych na kulturę może spowodować luki w zabezpieczeniach, jeśli bieżąca kultura zostanie zmieniona lub jeśli kultura na komputerze, na którym jest uruchomiony kod, różni się od kultury używanej do testowania kodu. Natomiast porównanie porządkowe zależy wyłącznie od wartości binarnej porównywanych znaków.

Dotyczy

Zobacz też