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 ます。 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 ます。 カルチャに依存した文字列操作を実行するコードは、現在のカルチャが変更された場合、またはコードを実行しているコンピューターのカルチャが、コードのテストに使用されるカルチャと異なる場合に、セキュリティ上の脆弱性を引き起こす可能性があります。 これに対して、序数に基づく比較は、比較対象の文字のバイナリ値だけに依存します。

適用対象

こちらもご覧ください