Dışarıya aktar (0) Yazdır
Tümünü Genişlet
Bu makale makine tarafından çevrilmiştir. Orijinal metni görmek için imlecinizi makaledeki cümlelerin üzerine getirin. Daha Fazla Bilgi.
Çeviri
Original

String.Format Yöntem

Belirtilen bir dizenin biçimi her öğesinde karşılık gelen bir nesnenin değeri metin eşdeğerleriyle değiştirir.

Bu üye aşırı yüklendi. Sözdizimi, kullanım ve örnekleri dahil olmak üzere bu üyeyle ilgili eksiksiz bilgi için aşırı yükleme listesindeki ada tıklayın.

  Ad Açıklama
Genel yöntem Statik üye Format(String, Object) Bir veya daha fazla biçim öğeleri belirtilen dize ile belirtilen nesne dize gösterimini değiştirir.
Genel yöntem Statik üye Format(String, Object[]) Belirtilen dizedeki biçim öğesini, belirtilen dizideki ilgili nesnenin dize temsiliyle değiştirir.
Genel yöntem Statik üye Format(IFormatProvider, String, Object[]) Belirtilen dizide karşılık gelen nesnelerin dize temsilini ile belirtilen bir dizenin biçim öğeleri değiştirir. Bir parametre kültüre özgü biçimlendirme bilgilerini sağlar.
Genel yöntem Statik üye Format(String, Object, Object) Belirtilen dizenin biçim öğeleri dize halinde temsilini iki belirtilen nesneler ile değiştirir.
Genel yöntem Statik üye Format(String, Object, Object, Object) Belirtilen dizenin biçim öğeleri dize halinde temsilini üç belirtilen nesneler ile değiştirir.
Üst

Bu bölümde:

Aşırı yüklenmiş yöntem sözdizimi
Parametreler
Dönüş değeri
Özel Durumlar
Hangi yöntemi çağırmalıyım?
Kısaca Biçim yöntemi
Öğeyi Biçimlendir
Bağımsız değişkenlerin nasıl biçimlendirildiği
Aynı dizine sahip biçim öğeleri
Biçimlendirme ve kültür
Özel biçimlendirme işlemleri
Örnekler:
       Tek bir bağımsız değişken biçimlendirme
       İki bağımsız biçimlendirme
       Üç bağımsız biçimlendirme
       Üçten fazla bağımsız değişken biçimlendirme
       Kültüre duyarlı biçimlendirme
       Özel bir biçimlendirme işlemi
       Bir kesme noktası sağlayıcısı ve Romen biçimlendirici
Sürüm bilgileri

Aşırı yüklenmiş yöntem sözdizimi

Bir yükleme seçme konusunda ek yönergeler için bkz: Hangi yöntemi çağırmalıyım?

String String.Format(String format , Object arg0 )

Biçim öğeleri dize halinde temsilini belirtilen nesne ile değiştirir (örnek).

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

Biçim öğeleri dize halinde temsilini iki belirtilen nesneler ile değiştirir (örnek).

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

Biçim öğeleri dize halinde temsilini üç belirtilen nesneler ile değiştirir (örnek).

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

Belirtilen dizide karşılık gelen nesnelerin dize temsilini biçim öğeleri değiştirir (örnek).

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

Belirtilen dizi ilgili nesnenin string gösterimini biçim öğeleri değiştirir ve belirtilen kültüre özgü biçimlendirme bilgilerini kullanır (örnek) veya özel biçimlendirme bilgilerini (örnek).

Parametreler

Bu parametreler için tam bir listesi olan Format yöntemi; aşırı yük üstünde her aşırı yükleme tarafından kullanılan parametreleri için bkz. Yalnızca format parametresi, tüm aşırı yükleme tarafından kullanılır.

Parametre

Tür

Açıklama

s

String

Bir veya daha fazla biçim öğeleri içeren bir bileşik biçim dizesi (bkz: biçimi madde).

arg0

String

İlk veya biçimlendirmek için yalnızca nesne.

arg1

String

Biçimlendirilecek ikinci nesne.

arg2

String

Biçimlendirilecek üçüncü nesne.

args

String []

Sıfır veya daha fazla nesne biçimlendirmek için virgülle ayrılmış bir listede veya bir dizi olarak sağlanan.

provider

IFormatProvider

Özel veya kültüre özgü biçimlendirme bilgileri sağlayan nesne.

Dönüş değeri

Yazın: String
Bir kopyasını format içinde hangi biçim öğeleri dize halinde temsilini ilgili bağımsız değişkenler tarafından kullanılmaktadır.

Özel Durumlar

Özel Durum

Koşul

Tarafından oluşturulmuştur:

ArgumentNullException

format, null değerindedir.

Tüm aşırı yüklemeler.

FormatException

format birlikte kullanılamaz.

-veya-

Biçim öğesi sıfır veya daha büyük veya eşit bağımsız değişkenleri için bağımsız değişkenler listesindeki dizinidir.

Tüm aşırı yüklemeler.

Hangi yöntemi çağırmalıyım?

To

Call

Bir veya daha fazla nesne geçerli kültür kuralları kullanarak biçimlendirin.

İçeren aşırı dışında bir provider parametresi, tüm Format aşırı dahil bir String parametresi bir veya daha fazla nesne parametreleri izler. Bu nedenle, hangi belirlemek zorunda değilsiniz Format aşırı yüklemeyi düşündüğünüz çağırmak için. Dil derleyici uygun aşırı olmayan yüklemeler arasından seçecek bir provider , bağımsız değişken listesine göre parametre. Örneğin, beş bağımsız değişken listesi varsa, derleyici çağırır Format(String, Object[]) yöntem.

Bir veya daha fazla nesne, belirli bir kültür kuralları kullanarak biçimlendirin.

Format(IFormatProvider, String, Object[])

Özel bir biçimlendirme işlemi ile gerçekleştirmek bir ICustomFormatter uygulaması veya bir IFormattable uygulaması.

Format(IFormatProvider, String, Object[])

Kısaca Biçim yöntemi

Her aşırı yüklemesini Format yöntemini kullanan Bileşik biçimlendirme özelliği sıfır tabanlı dizin oluşturulmuş yer tutucular, biçim öğeleri adı verilen bir bileşik Biçim dizesinde eklenecek. Çalışma zamanında dize gösterimini karşılık gelen bağımsız değişkeni bir parametre listesindeki her öğeyi Biçimlendir değiştirilir. Bağımsız değişkenin değeri ise null, biçim öğesi yerine String.Empty. Örneğin, için aşağıdaki çağrı Format(String, Object, Object, Object) yöntemi bir biçim dizesine üç biçim öğeleri, {0}, {1} ve {2} ve üç öğesi olan bir bağımsız değişken listesi içerir.


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.   


Biçimlendirme öğesi

Biçim öğesi bu sözdizimi şöyledir:

{ index[,alignment][ :formatString] }

Parantezler isteğe bağlı öğeleri gösterir. Açılış ve kapanış ayraçlar gereklidir. (Literal açılış veya kapanış ayracı dize biçiminde "Kaçış kaşlı" bölümüne bakın Bileşik Biçimlendirme makale.)

Örneğin, bir biçim öğesi biçimine bir para birimi değeri olabilir şöyle görünür:


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


Biçim öğesi aşağıdaki öğelere sahiptir:

Dizin

Sıfır tabanlı bir dizin, dize gösterimidir olması için bağımsız değişken dizesi Bu pozisyonda yer. Bu bağımsız değişken ise null, bu konumda dize boş bir dize dahil edilir.

Hizalama

İsteğe bağlı. Bir işaretli tamsayı bağımsız değişkeni eklenir ve olup olmadığını (pozitif bir tamsayı) sağa hizalanır veya sola hizalı (negatif bir tamsayı) içine alan toplam uzunluğunu gösterir. Atlarsanız Hizalama, başında veya sonunda boşluk olan bir alana karşılık gelen bağımsız değişken dize gösterimini eklenir.

formatString

İsteğe bağlı. Karşılık gelen bağımsız değişken Sonuç dizesi biçimi belirten bir dize. Atlarsanız formatString, karşılık gelen bağımsız parametresiz ToString dize karþýlýðýna üretmek için yöntemi çağrılır. Belirtirseniz, formatString, biçimi öğeler tarafından başvuru bağımsız değişkeni uygulamalıdır IFormattable arabirim. Biçim dizgileri destekleyen türleri şunlardır:

Ancak, özel bir tür gerçekleştirebileceğinizi unutmayın IFormattable veya var olan bir türe ait IFormattable uygulaması.

Aşağıdaki örnek alignment ve formatString biçimlendirilmiş çıktı oluşturmak için bağımsız değişkenler.


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 %


Bağımsız değişkenlerin nasıl biçimlendirildiği

Biçim öğeleri dize başından itibaren sırayla çalıştırılır. Yöntemin bağımsız değişken listesindeki bir nesneye karşılık gelen dizin her biçim öğesi vardır. Format Yöntem bağımsız değişken alır ve dize karþýlýðýna aşağıdaki gibi türetilir:

  • Bağımsız değişken ise null, yöntem ekler String.Empty Sonuç dizesini içine.

  • Çağırırsanız Format(IFormatProvider, String, Object[]) aşırı ve provider parametre uygulayan ICustomFormatter arabirimi, bağımsız değişkeni için geçirilir provider nesnesinin ICustomFormatter.Format(String, Object, IFormatProvider) yöntem. Biçim öğesi içeriyorsa, bir formatString bağımsız değişkeni, onu geçirilen ilk bağımsız değişken olarak yönteme. Yoksa ICustomFormatter uygulama biçimlendirme hizmetleri sağlamak için bağımsız değişkeni; dize gösterimini döndürür Aksi takdirde, döner null ve sonraki adıma yürütür.

  • Bağımsız değişken kullanılıyorsa, IFormattable arabirimini, kendi IFormattable.ToString uygulaması çağrılır.

  • Bağımsız değişken parametresiz ToString yöntemi geçersiz kılındı veya devralınan Object sınıfı, adı verilir.

Çağrılarını karşılar bir örnek ICustomFormatter.Format yöntemi ve hangi bilgileri görmenize olanak sağlayan Format bkz: bileşik biçimlendirme dizesi, her biçim öğesi için bir biçimlendirme yöntemi yöntemi geçer Örnek 7: bir kesme noktası sağlayıcısı ve Romen biçimlendirici.

Aynı dizine sahip biçim öğeleri

Format Yöntemi atar bir FormatException değerinden büyük veya buna eşit sayıda bağımsız değişken bağımsız değişken listesinde dizin öğenin dizini ise, özel durum. Ancak, format birden çok biçim öğeleri aynı dizin değerine sahip olduğu sürece sayısından bağımsız olarak, daha fazla biçim öğeleri içerebilir. Çağrısında Format(String, Object) yöntemi aşağıdaki örnekte, bağımsız değişken listesi tek bir bağımsız değişken olsa da, biçim dizesi iki biçim öğeleri içerir: biri bir sayının ondalık değeri ve diğer onaltılık değerini görüntüler.


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


Biçimlendirme ve kültür

Genellikle, bağımsız değişken listesinde kendi dize sunumlarını tarafından döndürülen geçerli kültür kuralları kullanarak dönüştürülür CultureInfo.CurrentCulture özelliği. Çağırarak bu davranışı denetleyebilirsiniz Format(IFormatProvider, String, Object[]) tekrar. Bu fazla yükleme'nin provider parametresi bir IFormatProvider biçimlendirme Orta olarak kullanılan özel ve kültüre özgü biçimlendirme bilgileri sağlayan uygulama işlemek.

IFormatProvider Arabirimini tek üyesi olan GetFormat, biçimlendirme bilgilerini sağlayan nesne döndürmek için sorumlu olduğu. .NET Framework'ün üç olduğu IFormatProvider kültüre özgü biçimlendirme sağlayan uygulamaları:

Özel biçimlendirme işlemleri

Ayrıca çağrı Format(IFormatProvider, String, Object[]) özel biçimlendirme işlemleri için aşırı yük. Örneğin, bir tamsayı kimlik numarası veya telefon numarası olarak biçimlendirebilirsiniz. Özel biçimlendirme, gerçekleştirmek için provider bağımsız değişkeni hem de uygulamak gerekir IFormatProvider ve ICustomFormatter arabirimleri. Zaman Format(IFormatProvider, String, Object[]) yöntemine geçirilen bir ICustomFormatter uygulaması olarak provider bağımsız değişkeni, Format yöntem çağrıları kendi IFormatProvider.GetFormat uygulaması ve bir nesne türü ister ICustomFormatter. Daha sonra döndürülen çağırır ICustomFormatter nesnesinin Format her bileşik dize biçimi öğeyi biçimlendirmek için yöntem kendisine geçirilen.

Özel biçimlendirme çözümleri sağlama hakkında daha fazla bilgi için bkz: Nasıl yapılır: Özel Sayısal Biçim Sağlayıcıları Tanımlama ve Kullanma ve ICustomFormatter. Özel biçimlendirilmiş sayılar için tamsayı dönüştürür bir örnek için bkz: örnek 6: özel bir biçimlendirme işlemi. İşaretsiz baytlar Romen rakamlarına dönüştürür bir örnek için bkz: Örnek 7: kesme noktası sağlayıcısı ve Romen biçimlendirici.

Örnek 1: Tek bir bağımsız değişken biçimlendirme

Aşağıdaki örnek Format(String, Object) bir dize ortasında bir bireyin yaş gömmek için yöntem.


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.


Örnek 2: İki bağımsız değişken biçimlendirme

Bu örnek kullanır Format(String, Object, Object) genel saklanan saat ve sıcaklık verilerini görüntülemek için bir yöntem Dictionary<TKey, TValue> nesne. Olmasına rağmen sadece iki nesneyi biçimlendirmek için biçim dizesi üç biçim öğeleri olduğuna dikkat edin. Bunun nedeni, ilk nesne (tarih ve saat değeri) listesinde iki biçim öğesi tarafından kullanılan: saat ve ikinci tarihi görüntüler ilk biçimi öğe görüntüler.


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


Örnek 3: Üç bağımsız değişken biçimlendirme

Bu örnek kullanır Format(String, Object, Object, Object) Boolean sonucunu gösteren bir dize oluşturmak için yöntem And işlemi iki tamsayı değerler ile. Her öğe, iki farklı şekilde biçimlendirilir çünkü altı biçim öğeleri biçimlendirme dizesi içerir, ancak yöntem kendi parametre listesinde yalnızca üç öğe vardır unutmayın.


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)


Örnek 4: Üçten fazla bağımsız değişken biçimlendirme

Bu örnek, belirli bir tarihte yüksek ve düşük sıcaklık verilerini içeren bir dize oluşturur. Bileşik biçimlendirme dizesi ve altı Visual Basic örnekte C# örnek beş biçim öğeleri vardır. İki biçim öğeleri kendi karşılık gelen değerinin dize gösterimine genişliğini tanımlamak ve bir standart tarih ve saat biçim dizesi ilk biçimi öğeyi de içerir.


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)


Nesneleri bir dizi olarak biçimlendirilmesini geçebilen yerine bir bağımsız değişken listesi.


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


Örnek 5: Kültüre duyarlı biçimlendirme

Bu örnek kullanır Format(IFormatProvider, String, Object[]) birkaç farklı kültürler kullanarak dize halinde temsilini bazı tarih ve saat ve sayısal değerleri görüntülemek için bir yöntem.


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


Örnek 6: Özel bir biçimlendirme işlemi

Bu örnek, bir tamsayı değeri olarak bir x-xxxxx-xx formundaki müşteri hesap numarası biçimleri bir biçim sağlayıcısını tanımlar.


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.


Örnek 7: Bir kesme noktası sağlayıcısı ve Romen rakamı biçimlendirici

Bu örnek uygulayan bir özel biçim sağlayıcısını tanımlar ICustomFormatter ve IFormatProvider arabirimleri iki şey yapmak için:

  • Geçirilen parametreleri görüntüler, ICustomFormatter.Format uygulaması. Bu hangi parametreleri görmek bize sağlar Format(IFormatProvider, String, Object[]) yöntemi biçimlendirmek için çalışan her nesne için özel biçimlendirme uygulama iletmekle. Uygulamanızın ayıklarken bu yararlı olabilir.

  • Biçimlendirilecek "R" standart biçim dizesi kullanılarak biçimlendirilmiş olan bir işaretsiz bayt değer nesnesidir, özel biçimlendirici bir sayısal değer Romen rakamı biçimlendirir.


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


Sürüm bilgileri

.NET Framework

Tüm aşırı yüklemeler desteklenir: 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework İstemci Profili

Tüm aşırı yüklemeler desteklenir: 4, 3.5 SP1

Taşınabilir Sınıf Kitaplığı

Yalnızca Format(String, Object[]) ve Format(IFormatProvider, String, Object[]) desteklenir

Windows Mağazası uygulamaları için .NET

Yalnızca Format(String, Object[]) ve Format(IFormatProvider, String, Object[]) Windows 8'de desteklenir

Topluluk İçeriği

Ekle
Show:
© 2014 Microsoft