CultureInfo.InvariantCulture CultureInfo.InvariantCulture CultureInfo.InvariantCulture CultureInfo.InvariantCulture Property

定义

获取不依赖于区域性(固定)的 CultureInfo 对象。Gets the CultureInfo object that is culture-independent (invariant).

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

属性值

不依赖于区域性(固定)的对象。The object that is culture-independent (invariant).

注解

固定区域性不区分区域性;它是关联与英语语言,但不能与任何国家/地区。The invariant culture is culture-insensitive; it is associated with the English language but not with any country/region. 固定区域性按名称指定通过使用空字符串 ("") 对的调用中CultureInfo实例化方法。You specify the invariant culture by name by using an empty string ("") in the call to a CultureInfo instantiation method. CultureInfo.InvariantCulture 此外将检索固定区域性的实例。CultureInfo.InvariantCulture also retrieves an instance of the invariant culture. 它可以在几乎所有方法中使用System.Globalization要求区域性的命名空间。It can be used in almost any method in the System.Globalization namespace that requires a culture. 如返回属性的对象CompareInfoDateTimeFormat,和NumberFormat还反映字符串比较和格式设置的固定区域性的约定。The objects returned by properties such as CompareInfo, DateTimeFormat, and NumberFormat also reflect the string comparison and formatting conventions of the invariant culture.

与不同的是区分区域性的数据,可能会发生更改的用户自定义或对.NET Framework 或操作系统的更新,固定区域性稳定时间和已安装的区域性特定和数据不能由用户自定义。Unlike culture-sensitive data, which is subject to change by user customization or by updates to the .NET Framework or the operating system, invariant culture data is stable over time and across installed cultures and cannot be customized by users. 这样,固定区域性特别有用的操作,需要依赖于区域性的结果,如格式设置和分析操作保留格式的数据,或排序和排序操作需要的数据显示在无论区域性固定的顺序。This makes the invariant culture particularly useful for operations that require culture-independent results, such as formatting and parsing operations that persist formatted data, or sorting and ordering operations that require that data be displayed in a fixed order regardless of culture.

字符串操作String Operations

为区分区域性的字符串操作不受当前线程区域性的约定和的上都是一致的区域性,可以使用固定区域性。You can use the invariant culture for culture-sensitive string operations that are not affected by the conventions of the current thread culture and that are consistent across cultures. 例如,可能想要按固定顺序或适用于不考虑当前线程区域性的字符串的一组标准的大小写约定的已排序的数据。For example, you may want sorted data to appear in a fixed order or apply a standard set of casing conventions to strings regardless of the current thread culture. 若要执行此操作,可以传递InvariantCulture对象具有方法CultureInfo参数,如Compare(String, String, Boolean, CultureInfo)ToUpper(CultureInfo)To do this, you pass the InvariantCulture object to a method that has a CultureInfo parameter, such as Compare(String, String, Boolean, CultureInfo) and ToUpper(CultureInfo).

保存数据Persisting Data

InvariantCulture属性可用于将数据保存在独立于区域性的格式。The InvariantCulture property can be used to persist data in a culture-independent format. 这提供了已知的格式不会更改,可用来序列化和反序列化各个区域性的数据。This provides a known format that does not change and that can be used to serialize and deserialize data across cultures. 反序列化数据后,它可以适当地根据当前用户的区域性约定进行格式化。After the data is deserialized, it can be formatted appropriately based on the cultural conventions of the current user.

例如,如果您选择保留以字符串形式的日期和时间数据,则可以传递InvariantCulture对象传递给DateTime.ToString(String, IFormatProvider)DateTimeOffset.ToString(IFormatProvider)方法来创建字符串,并且您可以将传递InvariantCulture对象传递给DateTime.Parse(String, IFormatProvider)DateTimeOffset.Parse(String, IFormatProvider, DateTimeStyles)将字符串转换回为日期和时间值的方法。For example, if you choose to persist date and time data in string form, you can pass the InvariantCulture object to the DateTime.ToString(String, IFormatProvider) or DateTimeOffset.ToString(IFormatProvider) method to create the string, and you can pass the InvariantCulture object to the DateTime.Parse(String, IFormatProvider) or DateTimeOffset.Parse(String, IFormatProvider, DateTimeStyles) method to convert the string back to a date and time value. 此方法可确保基础的日期和时间值不会更改时读取或写入来自不同的区域性的用户数据。This technique ensures that the underlying date and time values do not change when the data is read or written by users from different cultures.

下面的示例使用固定区域性来持久保存DateTime以字符串形式的值。The following example uses the invariant culture to persist a DateTime value as a string. 然后,分析字符串,并使用法语 (法国) 和德语 (德国) 区域性的格式设置约定来显示其值。It then parses the string and displays its value by using the formatting conventions of the French (France) and German (Germany) cultures.

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

安全决策Security Decisions

如果您要做 (如是否允许对系统资源的访问) 的安全决策基于字符串比较或大小写更改的结果,您不应使用固定区域性。If you are making a security decision (such as whether to allow access to a system resource) based on the result of a string comparison or a case change, you should not use the invariant culture. 相反,应通过调用包含的方法来执行区分大小写或不区分大小写的序号比较StringComparison参数并提供任一StringComparison.OrdinalStringComparison.OrdinalIgnoreCase作为自变量。Instead, you should perform a case-sensitive or case-insensitive ordinal comparison by calling a method that includes a StringComparison parameter and supplying either StringComparison.Ordinal or StringComparison.OrdinalIgnoreCase as an argument. 如果更改当前区域性或运行代码的计算机上的区域性与可用来测试代码的区域性,则执行区分区域性的字符串操作的代码可能导致安全漏洞。Code that performs culture-sensitive string operations can cause security vulnerabilities if the current culture is changed or if the culture on the computer that is running the code differs from the culture that is used to test the code. 与此相反,序号比较仅取决于比较的字符的二进制值。In contrast, an ordinal comparison depends solely on the binary value of the compared characters.

适用于

另请参阅