CultureInfo.InvariantCulture Свойство
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Возвращает объект CultureInfo, не зависящий от языка и региональных параметров (инвариантный).
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
Значение свойства
Объект, не зависящий от языка и региональных параметров (инвариантный).
Комментарии
Инвариантный язык и региональные параметры не учитываются; он связан с английским языком, но не с какой-либо страной или регионом. Инвариантный язык и региональные параметры указываются по имени с помощью пустой строки ("") в вызове 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.Ordinal в StringComparison.OrdinalIgnoreCase качестве аргумента. Код, выполняющий операции строки с учетом языка и региональных параметров, может вызвать уязвимости системы безопасности, если текущий язык и региональные параметры изменены или если язык и региональные параметры на компьютере, на котором выполняется код, отличается от языка и региональных параметров, используемых для тестирования кода. Напротив, порядковое сравнение зависит исключительно от двоичного значения сравниваемых символов.