エクスポート (0) 印刷
すべて展開
この記事は機械翻訳されたものです。 記事の文章にポインターを重ねると、原文のテキストが表示されます。 詳細情報
訳文
原文

String.Format メソッド

指定した文字列の各書式項目を、対応するオブジェクトの値と等価のテキストに置換します。

このメンバーはオーバーロードされます。構文、使用方法、例など、このメンバーの詳細については、オーバーロード リストで名前をクリックしてください。

  名前 説明
パブリック メソッド 静的メンバー Format(String, Object) 指定した文字列の 1 つまたは複数の書式項目を、指定したオブジェクトの文字列形式に置換します。
パブリック メソッド 静的メンバー Format(String, Object[]) 指定した文字列の書式項目を、指定した配列内の対応するオブジェクトの文字列形式に置換します。
パブリック メソッド 静的メンバー Format(IFormatProvider, String, Object[]) 指定した文字列の書式項目を、指定した配列内の対応するオブジェクトの文字列形式に置換します。 パラメーターにより、カルチャに固有の書式情報が指定されます。
パブリック メソッド 静的メンバー Format(String, Object, Object) 指定した文字列の書式項目を、指定した 2 つのオブジェクトの文字列形式に置換します。
パブリック メソッド 静的メンバー Format(String, Object, Object, Object) 指定した文字列の書式項目を、指定した 3 つのオブジェクトの文字列形式に置換します
このページのトップへ

このセクションの内容:

オーバーロードされたメソッドの構文
パラメーター
戻り値
例外
私は、どのメソッドを呼び出します。
形式のメソッドの概要に
書式指定項目
引数の書式がどのように変化するか
同じインデックスにある書式指定項目
書式とカルチャ
カスタム書式操作
次に例を示します。
       一つの引数の書式設定
       2 個の引数の書式設定
       3 個の引数の書式設定
       3 つ以上の引数の書式設定
       カルチャに依存したな書式設定
       カスタム書式操作
       標準のプロバイダーとローマ数字フォーマッタ
[バージョン情報]

オーバーロードされたメソッドの構文

オーバーロードのオプションの追加については、私は、どのメソッドを呼び出します。を参照してください。

String String.Format(String format , Object arg0 )

指定したオブジェクト () 文字列形式と書式項目を置換します。

String String.Format(String format , Object arg0 , Object arg1 )

2 種類の指定されたオブジェクト () 文字列形式と書式項目を置換します。

String String.Format(String format , Object arg0 , Object arg1 , Object arg2 )

3 種類の指定されたオブジェクト () 文字列形式と書式項目を置換します。

String String.Format(String format , params Object[] args )

指定された配列 () の対応するオブジェクトの文字列形式と書式項目を置換します。

String String.Format(IFormatProvider provider , String format , params Object[] args )

書式指定項目を指定された配列の対応するオブジェクトの文字列形式に置き換え、したカルチャに固有の書式設定情報 () またはカスタム書式情報 () を使用します。

パラメーター

これは Format のメソッドのパラメーターの一覧が; 各オーバーロードで使用するパラメーターについては、上記のオーバーロード構文を参照してください。 format パラメーターはすべてのオーバーロードによって使用されます。

パラメーター

Type

説明

s

String

格納する複合書式指定文字列、一つ以上の書式指定項目 (書式指定項目を参照してください。

arg0

String

形式に対する第 1 またはオブジェクトだけです。

arg1

String

2 番目に書式設定するオブジェクト。

arg2

String

3 番目に書式設定するオブジェクト。

args

String []

コンマ区切りの一覧または配列に指定された形式にゼロ以上のオブジェクト。

provider

IFormatProvider

このオブジェクトを提供するカスタムのか、カルチャ固有の書式設定情報。

戻り値

型: String
書式指定項目に対応する引数を文字列形式によって置き換えられる format のコピー。

例外

Exception

状態

スローされる

ArgumentNullException

formatnull なので、

すべてのオーバーロード。

FormatException

format が無効です。

または

書式指定項目のインデックスは、引数リストの引数の数には、より大きいか等しい未満。

すべてのオーバーロード。

私は、どのメソッドを呼び出します。

To

Call

現在のカルチャの規則を使用して一つ以上のオブジェクトを書式設定します。

provider パラメーターを含むオーバーロードを除き、Format のすべてのオーバーロードは、一つ以上のオブジェクト パラメーターに続く String パラメーターが含まれます。 このため、Format のどのオーバーロードを呼び出そうとするかを確認する必要はありません。 言語コンパイラは引数リストに基づいて provider パラメーターがないオーバーロードの中から適切なオーバーロードを選択します。 たとえば、引数リストに 5 個の引数を指定した場合、コンパイラは Format(String, Object[]) のメソッドを呼び出します。

特定のカルチャの規則を使用して一つ以上のオブジェクトを書式設定します。

Format(IFormatProvider, String, Object[])

ICustomFormatter の実装または IFormattable の実装を持つカスタム書式操作を実行します。

Format(IFormatProvider, String, Object[])

形式のメソッドの概要に

Format メソッドの各オーバーロードは、複合書式指定機能を使用して、複合書式文字列の中に、書式項目と呼ばれるゼロから始まるインデックスが設定されたプレースホルダーを含めます。 実行時に、各書式項目は、パラメーター リスト内の対応する引数の文字列表現に置換されます。 引数の値が nullは、書式指定項目は String.Emptyに置き換えられます。 たとえば、Format(String, Object, Object, Object)メソッドに対する次の呼び出しには、3 つの書式項目 ({0}、{1}、および {2}) がある書式文字列と、3 つの項目がある引数リストが含まれます。


DateTime dat = new DateTime(2012, 1, 17, 9, 30, 0); 
string city = "Chicago";
int temp = -16;
string output = String.Format("At {0} in {1}, the temperature was {2} degrees.",
                              dat, city, temp);
Console.WriteLine(output);
// The example displays the following output:
//    At 1/17/2012 9:30:00 AM in Chicago, the temperature was -16 degrees.   


書式指定項目

書式指定項目にこの構文があります:

{ index[,alignment][ :formatString] }

角かっこは、省略可能な要素を示します。 左右の中かっこが必要です。(リテラル中かっこまたは右中かっこと書式指定文字列に含めるには、「エスケープを修正する 複合書式設定 」の"セクションを参照してください)。

たとえば、通貨値に書式設定する書式指定項目が次のように表示:


String.Format("{0,-10:C}", 126347.89m);         


書式項目には次の要素があります。

index

その文字列表現が文字列のこの位置に含まれている引数の 0 から始まるインデックス。 この引数を nullの場合は、空の文字列は、文字列のこの位置に格納されます。

配置

省略可能。 引数が挿入されるフィールドの全体の長さと、右揃えで挿入する (正の整数) か左揃えで挿入する (負の整数) かを示す符号付き整数。 配置を省略すると、対応する引数を文字列形式には、先頭または末尾の空白を除いたフィールドに挿入されます。

formatString

省略可能。 対応する引数の結果文字列の書式を指定する文字列。 formatStringを省略する文字列形式を作成するには、対応する引数は、パラメーター ToString のメソッドが呼び出されます。 formatStringを指定する場合は、書式指定項目で参照される引数は IFormattable インターフェイスを実装しなければなりません。 サポート書式指定文字列を次のように入力します:

ただし、カスタム型を IFormattable を実装するか、または既存の型の IFormattable の実装を拡張できることに注意してください。

次の例は、書式付き出力を生成するために alignmentformatString の引数を使用します。


using System;

public class Example
{
   public static void Main()
   {
      // Create array of 5-tuples with population data for three U.S. cities, 1940-1950.
      Tuple<string, DateTime, int, DateTime, int>[] cities = 
          { Tuple.Create("Los Angeles", new DateTime(1940, 1, 1), 1504277, 
                         new DateTime(1950, 1, 1), 1970358),
            Tuple.Create("New York", new DateTime(1940, 1, 1), 7454995, 
                         new DateTime(1950, 1, 1), 7891957),  
            Tuple.Create("Chicago", new DateTime(1940, 1, 1), 3396808, 
                         new DateTime(1950, 1, 1), 3620962),  
            Tuple.Create("Detroit", new DateTime(1940, 1, 1), 1623452, 
                         new DateTime(1950, 1, 1), 1849568) };

      // Display header
      string header = String.Format("{0,-12}{1,8}{2,12}{1,8}{2,12}{3,14}\n",
                                    "City", "Year", "Population", "Change (%)");
      Console.WriteLine(header);
      string output;      
      foreach (var city in cities) {
         output = String.Format("{0,-12}{1,8:yyyy}{2,12:N0}{3,8:yyyy}{4,12:N0}{5,14:P1}",
                                city.Item1, city.Item2, city.Item3, city.Item4, city.Item5,
                                (city.Item5 - city.Item3)/ (double)city.Item3);
         Console.WriteLine(output);
      }
   }
}
// The example displays the following output:
//    City            Year  Population    Year  Population    Change (%)
//    
//    Los Angeles     1940   1,504,277    1950   1,970,358        31.0 %
//    New York        1940   7,454,995    1950   7,891,957         5.9 %
//    Chicago         1940   3,396,808    1950   3,620,962         6.6 %
//    Detroit         1940   1,623,452    1950   1,849,568        13.9 %


引数の書式がどのように変化するか

書式指定項目は文字列の先頭から順に処理されます。 各書式指定項目にメソッドの引数リスト オブジェクトに対応するインデックスがあります。 Format のメソッドは次のように引数を取得し、その文字列形式を派生します:

  • 引数が nullの場合、メソッドは、結果の文字列に String.Empty を挿入します。

  • Format(IFormatProvider, String, Object[]) のオーバーロードを呼び出し、provider パラメーターが ICustomFormatter インターフェイスを実装すれば、引数は provider オブジェクトの ICustomFormatter.Format(String, Object, IFormatProvider) のメソッドに渡されます。 書式指定項目を formatString の引数がある場合、メソッドの最初の引数として渡されます。 ICustomFormatter の実装が書式設定サービスを提供できる引数の文字列形式を返します。; それ以外の場合は null を返し、次のステップが実行されます。

  • 引数が IFormattable インターフェイスを実装すれば、IFormattable.ToString の実装が呼び出されます。

  • Object クラスからオーバーライドまたは継承される引数は、パラメーター ToString のメソッドが呼び出されます。

どのような情報を Format のメソッドが複合書式指定文字列の各書式項目の書式指定メソッドに渡すかを参照するに ICustomFormatter.Format のメソッドの中で呼び出しを受け取る例については、例 7: 標準のプロバイダーとローマ数字フォーマッタを参照してください。

同じインデックスにある書式指定項目

Format メソッドはインデックスの項目のインデックスが引数リストの引数の数の値以上である FormatException の例外をスローします。 ただし、format は複数の書式指定項目に同じインデックスがあれば引数を一つ以上の書式指定項目を含めることができます。 次の例で Format(String, Object) のメソッドへの呼び出しで、引数リストに一つの引数がありますが、書式指定文字列は、2 種類の書式指定項目が含まれています: 1 個の 10 進数の値を表示し、もう一つは 16 進値を表示します。


public class Example
{
   public static void Main()
   {
      short[] values= { Int16.MinValue, -27, 0, 1042, Int16.MaxValue };
      Console.WriteLine("{0,10}  {1,10}\n", "Decimal", "Hex");
      foreach (short value in values)
      {
         string formatString = String.Format("{0,10:G}: {0,10:X}", value);
         Console.WriteLine(formatString);
      }   
   }
}
// The example displays the following output:
//       Decimal         Hex
//    
//        -32768:       8000
//           -27:       FFE5
//             0:          0
//          1042:        412
//         32767:       7FFF


書式とカルチャ

通常、引数リスト オブジェクトを文字列形式に CultureInfo.CurrentCulture のプロパティによって返される現在のカルチャの規則を使用して変換されます。 Format(IFormatProvider, String, Object[]) のオーバーロードを呼び出すことで、この動作を制御できます。 このオーバーロードを provider パラメーターは書式設定プロセスを管理するために使用されるカスタム、カルチャ固有の書式設定情報を提供する IFormatProvider の実装です。

IFormatProvider インターフェイスに対する書式設定情報を提供するオブジェクトを返すことを担当する単一のメンバー、GetFormatがあります。 .NET Framework、カルチャ固有の書式を設定する IFormatProvider の 3 種類の実装があります:

  • CultureInfo . GetFormat のこのメソッドは書式の日時値の数値を書式指定するためのカルチャ固有の NumberFormatInfo オブジェクトおよびカルチャの DateTimeFormatInfo オブジェクト。

  • DateTimeFormatInfo 、日時の値のカルチャ固有の書式設定に使用されます。 GetFormat でそのメソッド自体を返します。

  • NumberFormatInfo 、数値のカルチャ固有の書式設定に使用されます。 その GetFormat のプロパティ自身が返されます。

カスタム書式操作

カスタム書式設定操作を実行するに Format(IFormatProvider, String, Object[]) のオーバーロードを呼び出すことができます。 たとえば、ID 番号または電話番号として整数を書式設定できます。 カスタム形式を実行するには、provider の引数は IFormatProviderICustomFormatter インターフェイスの両方を実装しなければなりません。 Format(IFormatProvider, String, Object[]) のメソッドが provider の引数、Format のメソッドの呼び出し IFormatProvider.GetFormat の実装と要求として ICustomFormatter の実装に型 ICustomFormatterオブジェクト渡すとき。 次に、渡された連結される文字列の各書式項目を書式設定するに ICustomFormatter に返されたオブジェクトの Format のメソッドを呼び出します。

カスタム書式のソリューションを提供する方法の詳細については、「方法 : カスタム数値書式プロバイダーを定義して使用するICustomFormatter」を参照してください。 書式化されたカスタム数値を整数に変換する例については、例 6: カスタム書式操作を参照してください。 ローマ数字に符号なしバイトを変換する例については、例 7: 標準のプロバイダーとローマ数字フォーマッタを参照してください。

例 1: 一つの引数の書式設定

次の例は、Format(String, Object) メソッドを使用して、文字列の途中に個人の年齢を埋め込みます。


using System;

[assembly: CLSCompliant(true)]
public class Example
{
   public static void Main()
   {
      DateTime birthdate = new DateTime(1993, 7, 28);
      DateTime[] dates = { new DateTime(1993, 8, 16), 
                           new DateTime(1994, 7, 28), 
                           new DateTime(2000, 10, 16), 
                           new DateTime(2003, 7, 27), 
                           new DateTime(2007, 5, 27) };

      foreach (DateTime dateValue in dates)
      {
         TimeSpan interval = dateValue - birthdate;
         // Get the approximate number of years, without accounting for leap years.
         int years = ((int) interval.TotalDays) / 365;
         // See if adding the number of years exceeds dateValue.
         string output;
         if (birthdate.AddYears(years) <= dateValue) {
            output = String.Format("You are now {0} years old.", years);
            Console.WriteLine(output);
         }   
         else {
            output = String.Format("You are now {0} years old.", years - 1);
            Console.WriteLine(output);
         }      
      }
   }
}
// The example displays the following output:
//       You are now 0 years old.
//       You are now 1 years old.
//       You are now 7 years old.
//       You are now 9 years old.
//       You are now 13 years old.


例 2: 2 個の引数の書式設定

この例では Dictionary<TKey, TValue> の一般的なオブジェクトに格納されているデータ時間と温度を表示するために Format(String, Object, Object) のメソッドを使用します。 形式には 2 種類のオブジェクトを持つ書式指定文字列に 3 桁の書式指定項目があることに注意してください。 これはリスト内の最初のオブジェクトに 2 番目の書式指定項目で (日付と時刻の値) が使用されるためです: 最初の書式指定項目には時間が表示され、2 番目は日付を表示します。


using System;
using System.Collections.Generic;

public class Example
{
   public static void Main()
   {
      Dictionary<DateTime, Double> temperatureInfo = new Dictionary<DateTime, Double>(); 
      temperatureInfo.Add(new DateTime(2010, 6, 1, 14, 0, 0), 87.46);
      temperatureInfo.Add(new DateTime(2010, 12, 1, 10, 0, 0), 36.81);

      Console.WriteLine("Temperature Information:\n");
      string output;   
      foreach (var item in temperatureInfo)
      {
         output = String.Format("Temperature at {0,8:t} on {0,9:d}: {1,5:N1}°F", 
                                item.Key, item.Value);
         Console.WriteLine(output);
      }
   }
}
// The example displays the following output:
//       Temperature Information:
//       
//       Temperature at  2:00 PM on  6/1/2010:  87.5°F
//       Temperature at 10:00 AM on 12/1/2010:  36.8°F


例 3: 3 個の引数の書式設定

この例では 2 個の整数値を持つ And ブール演算の結果を説明する文字列を作成するために Format(String, Object, Object, Object) のメソッドを使用します。 書式指定文字列には 6 つの書式指定項目が含まれますが、メソッドにはパラメーター リストに 3 つの項目しかありません。各項目が 2 つの異なる方法で書式指定されるからです。


using System;

public class Example
{
   public static void Main()
   {
      string formatString = "    {0,10} ({0,8:X8})\n" + 
                            "And {1,10} ({1,8:X8})\n" + 
                            "  = {2,10} ({2,8:X8})";
      int value1 = 16932;
      int value2 = 15421;
      string result = String.Format(formatString, 
                                    value1, value2, value1 & value2);
      Console.WriteLine(result);
   }
}
// The example displays the following output:
//                16932 (00004224)
//       And      15421 (00003C3D)
//         =         36 (00000024)


例 4: 3 つ以上の引数の書式設定

この例では、特定の日付の上位の気温のデータを含む文字列を作成します。 複合書式指定文字列には、C# の例では 5 つの書式項目、Visual Basic の例では 6 つの項目があります。 2 つの形式のアイテムが、それぞれ対応する値の文字列形式の幅を定義し、最初の形式のアイテムには、標準の日付と時刻の書式指定文字列も含まれます。


using System;

public class Example
{
   public static void Main()
   {
      DateTime date1 = new DateTime(2009, 7, 1);
      TimeSpan hiTime = new TimeSpan(14, 17, 32);
      decimal hiTemp = 62.1m; 
      TimeSpan loTime = new TimeSpan(3, 16, 10);
      decimal loTemp = 54.8m; 

      string result1 = String.Format("Temperature on {0:d}:\n{1,11}: {2} degrees (hi)\n{3,11}: {4} degrees (lo)", 
                                     date1, hiTime, hiTemp, loTime, loTemp);
      Console.WriteLine(result1);
      Console.WriteLine();

      string result2 = String.Format("Temperature on {0:d}:\n{1,11}: {2} degrees (hi)\n{3,11}: {4} degrees (lo)", 
                                     new object[] { date1, hiTime, hiTemp, loTime, loTemp });
      Console.WriteLine(result2);
   }
}
// The example displays the following output:
//       Temperature on 7/1/2009:
//          14:17:32: 62.1 degrees (hi)
//          03:16:10: 54.8 degrees (lo)
//       Temperature on 7/1/2009:
//          14:17:32: 62.1 degrees (hi)
//          03:16:10: 54.8 degrees (lo)


また、引数リストではなく配列として書式設定するオブジェクトを渡すことができます。


using System;

public class CityInfo
{
   public CityInfo(String name, int population, Decimal area, int year)
   {
      this.Name = name;
      this.Population = population;
      this.Area = area;
      this.Year = year;
   }

   public readonly String Name; 
   public readonly int Population;
   public readonly Decimal Area;
   public readonly int Year;
}

public class Example
{
   public static void Main()
   {
      CityInfo nyc2010 = new CityInfo("New York", 8175133, 302.64m, 2010);
      ShowPopulationData(nyc2010);
      CityInfo sea2010 = new CityInfo("Seattle", 608660, 83.94m, 2010);      
      ShowPopulationData(sea2010); 
   }

   private static void ShowPopulationData(CityInfo city)
   {
      object[] args = { city.Name, city.Year, city.Population, city.Area };
      String result = String.Format("{0} in {1}: Population {2:N0}, Area {3:N1} sq. feet", 
                                    args);
      Console.WriteLine(result); 
   }
}
// The example displays the following output:
//       New York in 2010: Population 8,175,133, Area 302.6 sq. feet
//       Seattle in 2010: Population 608,660, Area 83.9 sq. feet


例 5: カルチャに依存したな書式設定

この例は、複数の異なるカルチャを使用して、日付の文字列形式を、日時の値と数値表示に Format(IFormatProvider, String, Object[]) のメソッドを使用します。


using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      string[] cultureNames = { "en-US", "fr-FR", "de-DE", "es-ES" };

      DateTime dateToDisplay = new DateTime(2009, 9, 1, 18, 32, 0);
      double value = 9164.32;

      Console.WriteLine("Culture     Date                                Value\n");
      foreach (string cultureName in cultureNames)
      {
         CultureInfo culture = new CultureInfo(cultureName);
         string output = String.Format(culture, "{0,-11} {1,-35:D} {2:N}", 
                                       culture.Name, dateToDisplay, value);
         Console.WriteLine(output);
      }    
   }
}
// The example displays the following output:
//    Culture     Date                                Value
//    
//    en-US       Tuesday, September 01, 2009         9,164.32
//    fr-FR       mardi 1 septembre 2009              9 164,32
//    de-DE       Dienstag, 1. September 2009         9.164,32
//    es-ES       martes, 01 de septiembre de 2009    9.164,32


例 6: カスタム書式操作

この例では、フォームの x-xxxxx-xx の顧客のアカウント番号として整数値の書式を設定する書式プロバイダーを定義しています。


using System;

public class TestFormatter
{
   public static void Main()
   {
      int acctNumber = 79203159;
      Console.WriteLine(String.Format(new CustomerFormatter(), "{0}", acctNumber));
      Console.WriteLine(String.Format(new CustomerFormatter(), "{0:G}", acctNumber));
      Console.WriteLine(String.Format(new CustomerFormatter(), "{0:S}", acctNumber));
      Console.WriteLine(String.Format(new CustomerFormatter(), "{0:P}", acctNumber));
      try {
         Console.WriteLine(String.Format(new CustomerFormatter(), "{0:X}", acctNumber));
      }
      catch (FormatException e) {
         Console.WriteLine(e.Message);
      }
   }
}

public class CustomerFormatter : IFormatProvider, ICustomFormatter
{
   public object GetFormat(Type formatType) 
   {
      if (formatType == typeof(ICustomFormatter))        
         return this; 
      else
         return null;
   }

   public string Format(string format, 
	                     object arg, 
	                     IFormatProvider formatProvider) 
   {                       
      if (! this.Equals(formatProvider))
      {
         return null;
      }
      else
      {
         if (String.IsNullOrEmpty(format)) 
            format = "G";

         string customerString = arg.ToString();
         if (customerString.Length < 8)
            customerString = customerString.PadLeft(8, '0');

         format = format.ToUpper();
         switch (format)
         {
            case "G":
               return customerString.Substring(0, 1) + "-" +
                                     customerString.Substring(1, 5) + "-" +
                                     customerString.Substring(6);
            case "S":                          
               return customerString.Substring(0, 1) + "/" +
                                     customerString.Substring(1, 5) + "/" +
                                     customerString.Substring(6);
            case "P":                          
               return customerString.Substring(0, 1) + "." +
                                     customerString.Substring(1, 5) + "." +
                                     customerString.Substring(6);
            default:
               throw new FormatException( 
                         String.Format("The '{0}' format specifier is not supported.", format));
         }
      }   
   }
}
// The example displays the following output:
//       7-92031-59
//       7-92031-59
//       7/92031/59
//       7.92031.59
//       The 'X' format specifier is not supported.


例 7: 標準のプロバイダーとローマ数字フォーマッタ

この例では、次の 2 点を行うに ICustomFormatterIFormatProvider インターフェイスを実装するカスタム書式プロバイダーを定義し、T:

  • これは ICustomFormatter.Format の実装に渡されるパラメーターが表示されます。 これは、どのパラメーターが Format(IFormatProvider, String, Object[]) メソッドの書式を設定しようとする各オブジェクトのカスタム書式の実装に渡された原因を参照することができます。 これは、アプリケーションをデバッグするときに便利です。

  • 書式設定するオブジェクトが「R」標準書式指定文字列を使って書式設定された符号なしバイト値でカスタム書式指定ツールは、ローマ数字として数値を書式設定します。


using System;
using System.Globalization;

public class InterceptProvider : IFormatProvider, ICustomFormatter
{
   public object GetFormat(Type formatType)
   {
      if (formatType == typeof(ICustomFormatter))
         return this;
      else
         return null;
   }

   public string Format(String format, Object obj, IFormatProvider provider) 
   {
      // Display information about method call.
      string formatString = format ?? "<null>";
      Console.WriteLine("Provider: {0}, Object: {1}, Format String: {2}",
                        provider, obj ?? "<null>", formatString);

      if (obj == null) return String.Empty;

      // If this is a byte and the "R" format string, format it with Roman numerals.
      if (obj is Byte && formatString.ToUpper().Equals("R")) {
         Byte value = (Byte) obj;
         int remainder;
         int result;
         String returnString = String.Empty;

         // Get the hundreds digit(s)
         result = Math.DivRem(value, 100, out remainder);
         if (result > 0)  
            returnString = new String('C', result);
         value = (Byte) remainder;
         // Get the 50s digit
         result = Math.DivRem(value, 50, out remainder);
         if (result == 1)
            returnString += "L";
         value = (Byte) remainder;
         // Get the tens digit.
         result = Math.DivRem(value, 10, out remainder);
         if (result > 0)
            returnString += new String('X', result);
         value = (Byte) remainder; 
         // Get the fives digit.
         result = Math.DivRem(value, 5, out remainder);
         if (result > 0)
            returnString += "V";
         value = (Byte) remainder;
         // Add the ones digit.
         if (remainder > 0) 
            returnString += new String('I', remainder);

         // Check whether we have too many X characters.
         int pos = returnString.IndexOf("XXXX");
         if (pos >= 0) {
            int xPos = returnString.IndexOf("L"); 
            if (xPos >= 0 & xPos == pos - 1)
               returnString = returnString.Replace("LXXXX", "XC");
            else
               returnString = returnString.Replace("XXXX", "XL");   
         }
         // Check whether we have too many I characters
         pos = returnString.IndexOf("IIII");
         if (pos >= 0)
            if (returnString.IndexOf("V") >= 0)
               returnString = returnString.Replace("VIIII", "IX");
            else
               returnString = returnString.Replace("IIII", "IV");    

         return returnString; 
      }   

      // Use default for all other formatting.
      if (obj is IFormattable)
         return ((IFormattable) obj).ToString(format, CultureInfo.CurrentCulture);
      else
         return obj.ToString();
   }
}

public class Example
{
   public static void Main()
   {
      int n = 10;
      double value = 16.935;
      DateTime day = DateTime.Now;
      InterceptProvider provider = new InterceptProvider();
      Console.WriteLine(String.Format(provider, "{0:N0}: {1:C2} on {2:d}\n", n, value, day));
      Console.WriteLine(String.Format(provider, "{0}: {1:F}\n", "Today: ", 
                                      (DayOfWeek) DateTime.Now.DayOfWeek));
      Console.WriteLine(String.Format(provider, "{0:X}, {1}, {2}\n", 
                                      (Byte) 2, (Byte) 12, (Byte) 199));
      Console.WriteLine(String.Format(provider, "{0:R}, {1:R}, {2:R}\n", 
                                      (Byte) 2, (Byte) 12, (Byte) 199));
   }
}
// The example displays the following output:
//    Provider: InterceptProvider, Object: 10, Format String: N0
//    Provider: InterceptProvider, Object: 16.935, Format String: C2
//    Provider: InterceptProvider, Object: 1/31/2013 6:10:28 PM, Format String: d
//    10: $16.94 on 1/31/2013
//    
//    Provider: InterceptProvider, Object: Today: , Format String: <null>
//    Provider: InterceptProvider, Object: Thursday, Format String: F
//    Today: : Thursday
//    
//    Provider: InterceptProvider, Object: 2, Format String: X
//    Provider: InterceptProvider, Object: 12, Format String: <null>
//    Provider: InterceptProvider, Object: 199, Format String: <null>
//    2, 12, 199
//    
//    Provider: InterceptProvider, Object: 2, Format String: R
//    Provider: InterceptProvider, Object: 12, Format String: R
//    Provider: InterceptProvider, Object: 199, Format String: R
//    II, XII, CXCIX


[バージョン情報]

.NET Framework

すべてのオーバーロードでサポートされています: 4.5、4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

すべてのオーバーロードでサポートされています: 4、3.5 SP1

ポータブル クラス ライブラリ

Format(String, Object[]) Format(IFormatProvider, String, Object[]) のみサポートされます。

Windows ストア アプリ用 .NET

Format(String, Object[]) Format(IFormatProvider, String, Object[]) Windows 8 でのみサポートされます。

コミュニティの追加

追加
表示:
© 2014 Microsoft