CultureInfo.InvariantCulture Свойство

Определение

Возвращает объект CultureInfo, не зависящий от языка и региональных параметров (инвариантный).

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

Значение свойства

CultureInfo

Объект, не зависящий от языка и региональных параметров (инвариантный).

Комментарии

Инвариантный язык и региональные параметры не учитываются; он связан с английским языком, но не с какой-либо страной или регионом. Инвариантный язык и региональные параметры задаются по имени, используя пустую строку ("") в вызове метода создания экземпляра CultureInfo . CultureInfo.InvariantCulture также извлекает экземпляр инвариантного языка и региональных параметров. Его можно использовать практически в любом методе System.Globalization в пространстве имен, которому требуется язык и региональные параметры. Объекты, возвращаемые такими свойствами, как CompareInfo, DateTimeFormatи NumberFormat также отражают соглашения о сравнении строк и форматировании инвариантного языка и региональных параметров.

В отличие от данных, зависящих от языка и региональных параметров, которые могут быть изменены путем настройки пользователя или обновления платформа .NET Framework или операционной системы, инвариантные данные языка и региональных параметров являются стабильными с течением времени и между установленными языками и региональными параметрами и не могут быть настроены пользователями. Это делает инвариантный язык и региональные параметры особенно полезными для операций, требующих результатов, не зависящих от языка и региональных параметров, таких как операции форматирования и анализа, сохраняющие форматированные данные, или операции сортировки и упорядочения, требующие отображения данных в фиксированном порядке независимо от языка и региональных параметров.

Строковые операции

Инвариантный язык и региональные параметры можно использовать для строковых операций с учетом языка и региональных параметров, на которые не влияют соглашения текущего языка и региональных параметров и которые согласованы в разных языках и региональных параметрах. Например, отсортированные данные могут отображаться в фиксированном порядке или применять стандартный набор соглашений о регистре к строкам независимо от текущего языка и региональных параметров. Для этого необходимо передать InvariantCulture объект в метод с параметром CultureInfo , например Compare(String, String, Boolean, CultureInfo) и ToUpper(CultureInfo).

Сохранение данных

Свойство InvariantCulture можно использовать для сохранения данных в формате, независимом от языка и региональных параметров. Это известный формат, который не изменяется и который можно использовать для сериализации и десериализации данных в разных языках и региональных параметрах. После десериализации данных их можно отформатировать соответствующим образом в соответствии с культурными соглашениями текущего пользователя.

Например, если вы решили сохранить данные даты и времени в строковой форме, можно передать InvariantCulture объект DateTime.ToString(String, IFormatProvider) в метод или DateTimeOffset.ToString(IFormatProvider) для создания строки, а также передать InvariantCulture объект DateTime.Parse(String, IFormatProvider) в метод или DateTimeOffset.Parse(String, IFormatProvider, DateTimeStyles) , чтобы преобразовать строку обратно в значение даты и времени. Этот метод гарантирует, что базовые значения даты и времени не изменяются при чтении или записи данных пользователями из разных языков и региональных параметров.

В следующем примере используется инвариантный язык и региональные параметры для сохранения DateTime значения в виде строки. Затем он анализирует строку и отображает ее значение с помощью соглашений о форматировании французского (Франция) и немецкого (Германия) языков и региональных параметров.

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

Решения по обеспечению безопасности

При принятии решения о безопасности (например, о том, следует ли разрешить доступ к системным ресурсам) на основе результатов сравнения строк или изменения регистра, не следует использовать инвариантный язык и региональные параметры. Вместо этого следует выполнить порядковое сравнение с учетом регистра или без учета регистра путем вызова метода, который включает StringComparison параметр и предоставления или StringComparison.OrdinalStringComparison.OrdinalIgnoreCase в качестве аргумента. Код, выполняющий строковые операции с учетом языка и региональных параметров, может привести к уязвимостям системы безопасности, если изменяется текущий язык и региональные параметры или язык и региональные параметры на компьютере, на котором выполняется код, отличаются от языка и региональных параметров, используемых для тестирования кода. В отличие от этого, порядковое сравнение зависит исключительно от двоичного значения сравниваемых символов.

Применяется к

См. также раздел