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


158

Convert.ToString()和之间有什么区别.ToString()

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


7
您说您在网络上有很多不同之处,后来又问它是否仅出于特定原因?您还在网上找到了什么?
瑞安

3
Convert.ToString()具有允许使用CultureInfo的重载,而.ToString()没有此类重载。
Artemix 2014年

Answers:


232

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


3
很好。出于这个特定原因,只有他们使用。两种方法?
TinTin

此外,半相关的,看到这个答案详细:stackoverflow.com/questions/496096/...
JYelton

有关使用JustDecompile / Reflector的差异的更多信息:kodefuguru.com/post/2011/06/14/…– Ubikuity 2012
17:03

5
您是否要null返回空字符串或引发异常?有点像强制转换和使用之间的区别as:静默转换。
styfle 2012年

@Ubikuity:链接已断开
hdoghmen 2015年

64

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


var arg = Request.Params.Get(“ __ EVENTARGUMENT”); 字符串_arg = Convert.ToString(arg); 当arg为null时,_arg不重现String.Empty。为什么?
vml19 2012年

2
@Nilaa,您可能想打开另一个问题问这个问题,而不是发表评论。我的第一个问题是什么并不时arg为null,则返回?我的第一个想法是“ arg”实际上已经是“ string”类型的,因此您正在调用Convert.ToString(...)的重载,它只是返回传递给它的内容。该讨论涉及该方法的“对象”重载。
克里斯·德怀

4
@Roshe是的,我对此有点了解。 如果参数为,则Convert.ToString(string value)返回。 如果参数为,则返回。nullnullConvert.ToString(object value)String.Emptynull
Tim Goodman 2013年

22

除了有关处理null值的其他答案外,请在调用base之前Convert.ToString尝试使用IFormattableIConvertible接口Object.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

1
这应该添加到正确的答案,因为它是非常重要的信息。
桑索斯2015年

2
就像补充-基于参考源 IConvertible优先于IFormattable,反过来又优先于Object.ToString()实现。
Grx70

11

让我们通过以下示例了解区别:

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

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

它们之间的基本区别是该Convert函数处理NULLS而i.ToString ()不是NULL 。它将引发NULL参考异常错误。因此,作为良好的编码习惯,使用convert始终是安全的。


11
您的示例有点无效,因为int永远不能为null
MikeT

6

您可以创建一个类并重写该toString方法以执行所需的任何操作。

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

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


2
Convert.ToString实际上是一种检查null的安全方法,如果value不为null,则只需在其上调用ToString方法。因此,无论如何,如果您有重写的ToString方法,则将调用您的重写的ToString方法。
ZafarYousafi

而且,这种空安全性仅在您处理类时才有用。值类型不能为null,因此我们可以安全地对其调用ToString方法。
ZafarYousafi

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

4

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

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

从MSDN:
Convert.ToString方法

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

Object.ToString

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


“什么都不打印”?什么都没有 null""还是"null"
weston

3

在中Convert.ToString(),Convert处理一个NULL值或.ToString()不处理一个NULL值,但在其中不处理值和NULL引用异常错误。因此使用是一种良好的做法Convert.ToString()


3

对于喜欢代码的人来说,这是最好的答案。

    .............. 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
我很满意你的回答。因此+1。谢谢。
Ashok kumar,2013年

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

2

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



2
ToString() Vs Convert.ToString()

相似之处:-

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

区别 :-

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

范例:

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()
Fabio

0

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

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

在这里,这两种方法都用于转换字符串,但是它们之间的基本区别是:Convert函数handles NULL,但i.ToString()不会抛出异常。NULL reference exception error.因此,使用良好的编码习惯convert总是安全的。

让我们看另一个例子:

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.


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方法

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

Conver.ToString方法

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

0

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


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

  • (string)variable只会时,有一个隐含的明确你是铸造运营商所

  • ToString()可以被该类型覆盖(它可以控制其功能),如果没有,则导致该类型的名称

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


-1

Convert.Tostring()函数处理NULL,而.ToString()方法则不处理。拜访这里

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.