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

Posted

技术标签:

【中文标题】Convert.ToString() 和 .ToString() 之间的区别【英文标题】:Difference between Convert.ToString() and .ToString() 【发布时间】:2011-02-19 03:59:53 【问题描述】:

Convert.ToString().ToString() 有什么区别?

我在网上发现了很多不同之处,但主要的区别是什么?

【问题讨论】:

您说您在网络上有很多不同之处,后来您问是否仅出于这个特定原因?你在网上还发现了什么? Convert.ToString() 有一个允许使用 CultureInfo 的重载,而 .ToString() 没有这样的重载。 【参考方案1】:

Convert.ToString() 处理 null,而 ToString() 不处理。

【讨论】:

好.. 出于这个特定原因,只有他们使用。两种方法? 另外,半相关的,请参阅此答案以获取更多详细信息:***.com/questions/496096/… 更多关于使用 JustDecompile/Reflector 的差异的信息:kodefuguru.com/post/2011/06/14/… 你想让null返回一个空字符串还是抛出一个异常?这有点像投射和使用 as 之间的区别:静默转换。 @Ubikuity : 链接坏了【参考方案2】:

在对象上调用ToString() 假定该对象不为空(因为需要存在对象才能对其调用实例方法)。 Convert.ToString(obj) 不需要假定对象不为空(因为它是 Convert 类上的静态方法),但如果它为空,则会返回 String.Empty

【讨论】:

var arg = Request.Params.Get("__EVENTARGUMENT");字符串_arg = Convert.ToString(arg);当 arg 为空时,_arg 不会返回 String.Empty。为什么? @Nilaa 您可能想打开另一个问题来询问这个问题,而不是发表评论。我的第一个问题是当 arg 为空时它返回什么?我的第一个想法是“arg”实际上已经是“string”类型,所以你调用 Convert.ToString(...) 的重载,它只返回你传递给它的内容。这个讨论是关于方法的“对象”重载。 @Roshe 是的,我只是被这个咬了。如果参数是 nullConvert.ToString(string value) 返回 null。如果参数是 nullConvert.ToString(object value) 返回 String.Empty【参考方案3】:

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

例子:

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

【讨论】:

这应该添加到正确答案中,因为它是非常重要的信息。 作为补充——基于reference sourceIConvertible优先于IFormattable,后者又优先于Object.ToString()实现。【参考方案4】:

让我们通过这个例子来了解区别:

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

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

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

【讨论】:

你的例子有点无效,因为 int 永远不能为空【参考方案5】:

您可以创建一个类并覆盖toString 方法来做任何您想做的事情。

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

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

【讨论】:

Convert.ToString 实际上是一个安全的方法,它检查 null 并且如果 value 不为 null 它只是调用 ToString 方法。所以无论如何,如果你重写了 ToString 方法,你重写的 ToString 方法将被调用。 而且这种空安全性仅在您处理类时才有帮助。值类型不能为空,因此我们可以安全地对它们调用 ToString 方法。【参考方案6】:

这些方法“基本”相同,除了处理null

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

来自 MSDN:Convert.ToString Method

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

Object.ToString

返回一个代表当前对象的字符串。

【讨论】:

“什么都不打印”?什么都不是? null"""null"?【参考方案7】:
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

【讨论】:

【参考方案8】:

我同意@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);

【讨论】:

【参考方案9】:

Convert.ToString() 中,Convert 处理或不处理NULL 值,但在.ToString() 中,它不处理NULL 值和NULL 引用异常错误。所以最好使用Convert.ToString()

【讨论】:

【参考方案10】:

对于代码爱好者来说,这是最好的答案。

    .............. 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)

【讨论】:

我对您的回答非常满意。因此+1。谢谢。【参考方案11】:

Convert.ToString(strName) 将处理可空值,strName.Tostring() 将不处理空值并引发异常。

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

【讨论】:

【参考方案12】:

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

【讨论】:

【参考方案13】:
ToString() Vs Convert.ToString()

相似之处:-

两者都用于将特定类型转换为字符串,即 int 到 string、float 到 string 或 object 到 string。

区别:-

ToString() 无法处理空值,而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.
        
    

【讨论】:

Convert.ToString 不处理 Null Exception。它只是这样做:return value == null ? string.Empty : value.ToString()【参考方案14】:

为了理解这两种方法,让我们举个例子:

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

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

让我们看另一个例子:

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

string s;
object o = null;
s = Convert.ToString(o); 
//returns an empty string for s and does not throw an exception.

【讨论】:

【参考方案15】:

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

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

见.Net reference source

【讨论】:

【参考方案16】:

我写了这段代码并编译它。

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);
    

【讨论】:

【参考方案17】:

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

【讨论】:

【参考方案18】:

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

【讨论】:

【参考方案19】:

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

(string)variable 只会在您正在投射的内容上有 隐式显式 运算符时投射

ToString() 可以被类型覆盖(它可以控制自己的行为),否则会产生类型的名称

显然如果一个对象为null,则无法访问实例成员ToString(),会导致异常

【讨论】:

以上是关于Convert.ToString() 和 .ToString() 之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

ToString和Convert.ToString处理null值

c#中Convert.ToString(Convert.ToInt32(Convert.ToDouble(tbx_speed.Text)啥意思

API使用dynamic 传参

API使用dynamic 传参

C# 中的 Convert 类使用方法

C# 整数转二进制字符串