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. CompareInfoDateTimeFormatNumberFormatなどのプロパティによって返されるオブジェクトには、インバリアントカルチャの文字列比較と書式指定規則も反映されます。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)またはメソッドに渡しDateTime.Parse(String, IFormatProvider)て文字列を作成できますInvariantCulture 。また、また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.OrdinalまたはStringComparison.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.

適用対象

こちらもご覧ください