This documentation is archived and is not being maintained.

Convert.ToString Method (Object, IFormatProvider)

Converts the value of the specified object to its equivalent string representation using the specified culture-specific formatting information.

Namespace:  System
Assembly:  mscorlib (in mscorlib.dll)

public static string ToString(
	Object value,
	IFormatProvider provider


Type: System.Object
An object that supplies the value to convert, or null.
Type: System.IFormatProvider
An object that supplies culture-specific formatting information.

Return Value

Type: System.String
The string representation of value, or String.Empty if value is null.

If the value parameter implements the IConvertible interface, the method calls the IConvertible.ToString(IFormatProvider) implementation of value. Otherwise, if the value parameter implements the IFormattable interface, the method calls its IFormattable.ToString(String, IFormatProvider) implementation. If value implements neither interface, the method calls the value parameter's ToString() method.

The provider parameter is used if the value parameter implements the IConvertible or IFormattable interface. The provider parameter specifies culture-specific information used in the conversion of value. For example, if the value parameter is a negative decimal number, the provider parameter can supply culture-specific information about the notation used for the negative sign and decimal separator.

The following example defines a class named DummyProvider that simply intercepts method calls made by the ToString(Object, IFormatProvider) method to the provider parameter's IFormatProvider.GetFormat implementation, and then displays the type name of the object that the IFormatProvider.GetFormat method is expected to return. When the ToString(Object, IFormatProvider) method is passed a number of different data types in an object array, the output indicates whether the method actually uses the provider parameter with that particular data type. The output illustrates that the provider parameter is used when converting numeric and DateTime values to strings, but that it is not used with Boolean, character, string, or TimeSpan values.

using System;
using System.Globalization;

public class DummyProvider : IFormatProvider
    // Normally, GetFormat returns an object of the requested type
    // (usually itself) if it is able; otherwise, it returns Nothing. 
    public object GetFormat(Type argType)
        // Display the type of argType and return null.
        Console.Write( "{0,-25}", argType.Name);
        return null;

public class Example
   public static void Main()
      // Create an instance of the IFormatProvider.
      IFormatProvider provider = new DummyProvider();

      // Values to convert using DummyProvider.
      int int32A = -252645135;   
      double doubleA = 61680.3855;
      object objDouble = (object) -98765.4321;
      DateTime dayTimeA = new DateTime(2009, 9, 11, 13, 45, 0);
      bool boolA = true;
      string stringA = "Qwerty";
      char charA = '$';
      TimeSpan tSpanA = new TimeSpan(0, 18, 0);
      object objOther = provider;

      object[] objects= { int32A, doubleA, objDouble, dayTimeA, 
                          boolA, stringA, charA, tSpanA, objOther };

      // Call Convert.ToString(Object, provider) method for each value.
      foreach (object value in objects) 
         Console.WriteLine("{0,-20}  -->  {1,20}", 
                           value, Convert.ToString(value, provider));    
// The example displays the following output:
//    NumberFormatInfo         -252645135            -->            -252645135
//    NumberFormatInfo         61680.3855            -->            61680.3855
//    NumberFormatInfo         -98765.4321           -->           -98765.4321
//    DateTimeFormatInfo       9/11/2009 1:45:00 PM  -->  9/11/2009 1:45:00 PM
//    True                  -->                  True
//    Qwerty                -->                Qwerty
//    $                     -->                     $
//    00:18:00              -->              00:18:00
//    DummyProvider         -->         DummyProvider

The following example defines a Temperature class that overrides the Object.ToString method but does not implement the IConvertible interface. The example illustrates how calls to the Convert.ToString(Object, IFormatProvider) method, in turn, call the Temperature.ToString method.

using System;

public class Temperature
   private decimal m_Temp;

   public Temperature(decimal temperature)
      this.m_Temp = temperature;

   public decimal Celsius
      get { return this.m_Temp; }   

   public decimal Kelvin
      get { return this.m_Temp + 273.15m; }    

   public decimal Fahrenheit
      get { return Math.Round((decimal) (this.m_Temp * 9 / 5 + 32), 2); }

   public override string ToString()
      return m_Temp.ToString("N2") + " °C";


public class Example
   public static void Main()
      Temperature cold = new Temperature(-40);
      Temperature freezing = new Temperature(0);
      Temperature boiling = new Temperature(100);

      Console.WriteLine(Convert.ToString(cold, null));
      Console.WriteLine(Convert.ToString(freezing, null));
      Console.WriteLine(Convert.ToString(boiling, null));
// The example dosplays the following output:
//       -40.00 °C
//       0.00 °C
//       100.00 °C

.NET Framework

Supported in: 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

Portable Class Library

Supported in: Portable Class Library

Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.