Convert.ToString()和.ToString()之间的区别

时间:2010-05-13 15:43:30

标签: c# type-conversion tostring

Convert.ToString().ToString()之间的区别是什么?

我在网上发现了很多差异,但主要区别是什么?

20 个答案:

答案 0 :(得分:209)

Convert.ToString()处理null,而ToString()则不处理。{/ p>

答案 1 :(得分:57)

在对象上调用ToString()假定该对象不为null(因为需要存在一个对象来调用它上面的实例方法)。 Convert.ToString(obj)不需要假定对象不为null(因为它是Convert类的静态方法),而是如果 为null则返回String.Empty

答案 2 :(得分:20)

除了有关处理null值的其他答案之外,Convert.ToString在调用base IFormattable之前尝试使用IConvertibleObject.ToString接口。

示例:

class FormattableType : IFormattable
{
    private double value = 0.42;

    public string ToString(string format, IFormatProvider formatProvider)
    {
        if (formatProvider == null)
        {
            // ... using some IOC-containers
            // ... or using CultureInfo.CurrentCulture / Thread.CurrentThread.CurrentCulture
            formatProvider = CultureInfo.InvariantCulture;
        }

        // ... doing things with format
        return value.ToString(formatProvider);
    }

    public override string ToString()
    {
        return value.ToString();
    }
}

结果:

Convert.ToString(new FormattableType()); // 0.42
new FormattableType().ToString();        // 0,42

答案 3 :(得分:10)

让我们通过这个例子理解差异:

int i= 0;
MessageBox.Show(i.ToString());
MessageBox.Show(Convert.ToString(i));

我们可以使用ii.ToString ()转换整数Convert.ToString。那有什么区别?

它们之间的基本区别是Convert函数处理NULLS而i.ToString ()没有;它会抛出NULL引用异常错误。因此,使用convert的良好编码实践始终是安全的。

答案 4 :(得分:6)

您可以创建一个类并覆盖toString方法以执行任何操作。

例如,您可以创建一个类“MyMail”并覆盖toString方法以发送电子邮件或执行其他操作,而不是编写当前对象。

Convert.toString将指定的值转换为其等效的字符串表示形式。

答案 5 :(得分:5)

object o=null;
string s;
s=o.toString();
//returns a null reference exception for string  s.

string str=convert.tostring(o);
//returns an empty string for string str and does not throw an exception.,it's 
//better to use convert.tostring() for good coding

答案 6 :(得分:4)

方法基本上是""同样,除了处理 null

Pen pen = null; 
Convert.ToString(pen); // No exception thrown
pen.ToString(); // Throws NullReferenceException

来自MSDN:
Convert.ToString Method

  

将指定值转换为其等效的字符串表示形式。

Object.ToString

  

返回表示当前对象的字符串。

答案 7 :(得分:3)

Convert.ToString()中,转换处理NULL值,但.ToString()处理NULL值和NULL引用异常错误。因此,优良作法是使用Convert.ToString()

答案 8 :(得分:3)

对于Code爱好者来说,这是最佳答案。

    .............. Un Safe code ...................................
    Try
        ' In this code we will get  "Object reference not set to an instance of an object." exception
        Dim a As Object
        a = Nothing
        a.ToString()
    Catch ex As NullReferenceException
        Response.Write(ex.Message)
    End Try


    '............... it is a safe code..............................
    Dim b As Object
    b = Nothing
    Convert.ToString(b)

答案 9 :(得分:3)

我同意@Ryan的回答。顺便说一句,从C#6.0开始,您可以使用:

someString?.ToString() ?? string.Empty;

$"{someString}"; // I do not recommend this approach, although this is the most concise option.

而不是

Convert.ToString(someString);

答案 10 :(得分:2)

Convert.ToString(strName)将处理无效值,strName.Tostring()将不处理空值并抛出异常。

所以最好使用Convert.ToString()然后.ToString();

答案 11 :(得分:2)

ToString() Vs Convert.ToString()
  

相似之处: -

两者都用于将特定类型转换为字符串,即int转换为字符串,float转换为字符串或将对象转换为字符串。

  

差异: -

ToString()无法处理null,而Convert.ToString()将处理空值。

示例:

namespace Marcus
{
    class Employee
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }
    class Startup
    {
        public static void Main()
        {
            Employee e = new Employee();
            e = null;

            string s = e.ToString(); // This will throw an null exception
            s = Convert.ToString(e); // This will throw null exception but it will be automatically handled by Convert.ToString() and exception will not be shown on command window.
        }
    }
}

答案 12 :(得分:2)

ToString()无法处理空值,convert.ToString()可以处理null值,因此当您希望系统处理空值时,请使用convert.ToString()

答案 13 :(得分:0)

要了解这两种方法,请举一个例子:

int i =0;
MessageBox.Show(i.ToString());
MessageBox.Show(Convert.ToString(i)); 

这两种方法都用于转换字符串,但是它们之间的基本区别是:Convert函数处理NULL,而i.ToString()不处理它将抛出{{1} }因此,使用NULL reference exception error.的良好编码习惯总是安全的。

让我们看看另一个示例:

convert

答案 14 :(得分:0)

Convert.ToString(value)首先尝试将obj强制转换为IConvertible,然后IFormattable调用相应的ToString(...)方法。相反,如果参数值为null,则返回string.Empty。最后,如果没有其他作用,请返回obj.ToString()

值得注意的是,例如Convert.ToString(value)返回null的情况下,null 可以返回value.ToString()

请参见.Net reference source

答案 15 :(得分:0)

我编写了这段代码并将其编译。

class Program
{
    static void Main(string[] args)
    {
        int a = 1;
        Console.WriteLine(a.ToString());
        Console.WriteLine(Convert.ToString(a));
    }
}

通过使用“逆向工程”(ilspy),我发现“ object.ToString()”和“ Convert.ToString(obj)”恰好是一件事。 实际上'Convert.ToString(obj)'调用'object.ToString()',因此'object.ToString()'更快。

  

Object.ToString Method

class System.Object
{
    public string ToString(IFormatProvider provider)
    {
        return Number.FormatInt32(this, null, NumberFormatInfo.GetInstance(provider));
    }
}
  

Conver.ToString Method

class System.Convert
{
    public static string ToString(object value)
    {
        return value.ToString(CultureInfo.CurrentCulture);
    }
}

答案 16 :(得分:0)

Convert.Tostring()函数处理NULL,而.ToString()方法则不处理。访问here

答案 17 :(得分:0)

在C#中,如果您声明了字符串变量,并且没有为该变量分配任何值,则默认情况下该变量采用空值。在这种情况下,如果使用ToString()方法,则程序将引发null引用异常。另一方面,如果您使用Convert.ToString()方法,则您的程序将不会引发异常。

答案 18 :(得分:0)

  • Convert.Tostring()基本上只是调用以下value == null ? String.Empty: value.ToString()

  • (string)variable仅在您要投射的内容上存在隐式显式运算符时 cast p>

  • ToString()可以按类型覆盖(它可以控制所做的操作),如果不覆盖,则会产生类型的名称

很明显,如果对象为 null ,则无法访问实例成员ToString(),它将导致异常

答案 19 :(得分:0)

对于可空类型,ToString() 实际上处理 null 值:

int? i = null;
        
var s1 = i.ToString();  // returns ""

var s2 = Convert.ToString(i);   // returns ""

只是为了弥补现有的答案。

来源:

https://docs.microsoft.com/en-us/dotnet/api/system.nullable-1.tostring?view=net-5.0