本文由机器翻译。若要查看英语原文,请勾选“英语”复选框。 也可将鼠标指针移到文本上,在弹出窗口中显示英语原文。
翻译
英语

CultureInfo.InvariantCulture 属性

 

获取不依赖于区域性(固定)的 CultureInfo 对象。

命名空间:   System.Globalization
程序集:  mscorlib(位于 mscorlib.dll)

public static CultureInfo InvariantCulture { get; }

属性值

Type: System.Globalization.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

如果您要做 (例如是否允许对系统资源的访问) 的安全决策基于字符串比较或大小写更改的结果,则不应使用固定区域性。 相反,应通过调用包括的方法来执行区分大小写或不区分大小写的序号比较 StringComparison 参数,并提供 StringComparison.OrdinalStringComparison.OrdinalIgnoreCase 作为参数。 如果更改当前区域性,或者如果当前运行该代码的计算机上区域性不同于用来测试代码的区域性,则执行区分区域性的字符串操作的代码可能导致安全漏洞。 与此相反,序号比较仅仅取决于比较的字符的二进制值。

通用 Windows 平台
自 8 起可用
.NET Framework
自 1.1 起可用
可移植类库
可移植 .NET 平台 中受支持
Silverlight
自 2.0 起可用
Windows Phone Silverlight
自 7.0 起可用
Windows Phone
自 8.1 起可用
返回页首
显示: