2010-05-13 64 views
116

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

我在网上发现了很多差异,但是最大的区别是什么?

+6

,而不是你说你有在网络上有许多差异,后来你问只是因为这个具体原因吗?你还在网上找到了什么? – Ryan 2010-05-14 13:57:10

+3

Convert.ToString()有一个允许使用CultureInfo的重载,而.ToString()没有这样的重载。 – Artemix 2014-04-29 10:47:33

回答

159

Convert.ToString()手柄null,而ToString()没有。

+2

不错..只因为这个具体原因他们使用。两种方法? – TinTin 2010-05-13 15:48:01

+0

此外,半相关,请参阅此答案的更多详细信息:http://stackoverflow.com/questions/496096/casting-vs-using-the-as-keyword-in-the-clr/496167#496167 – JYelton 2010-05-13 15:50:34

+0

更多信息关于使用JustDecompile/Reflector的区别:http://www.kodefuguru.com/post/2011/06/14/Deeper-into-Convert-ToString.aspx – Ubikuity 2012-02-17 17:03:26

45

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

+0

var arg = Request.Params.Get(“__ EVENTARGUMENT”); string _arg = Convert.ToString(arg);当arg为null时,_arg不会回退String.Empty。为什么? – Roshe 2012-03-12 03:33:39

+2

@Nilaa您可能想要提出另一个问题,而不是发表评论。我的第一个问题是,当arg为空时,它会返回什么?我的第一个想法是“arg”实际上是“string”类型,所以你调用了Convert.ToString(...)的重载,它只是返回你传递给它的东西。这个讨论是关于该方法的“对象”超负荷。 – 2012-03-12 15:40:34

+3

@Roshe是的,我刚刚得到了这个。 'Convert.ToString(string value)'如果参数为null,则返回null。 'Convert.ToString(object value)'如果参数为'null'则返回'String.Empty'。 – 2013-08-29 15:22:06

2

Convert.ToString(),转换处理或者是NULL值或没有,但在.ToString()它不处理一个NULL值和NULL参考异常错误。所以最好使用Convert.ToString()

9

让我们明白通过这个例子的区别:

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

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

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

2

对于爱好者而言,这是最好的答案。

.............. 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。谢谢。 – 2013-04-17 10:18:02

4

您可以创建一个类,并重写toString方法去做任何你想要的。

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

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

+2

Convert.ToString实际上是一个检查null的安全方法,如果value不为null,它只需调用ToString方法就可以了。所以无论如何,如果你有overriden ToString方法,你的overriden ToString方法将被调用。 – ZafarYousafi 2013-02-25 07:32:26

+0

而这种无效安全只有在你处理类时才有用。值类型不能为空,所以我们可以安全地调用ToString方法。 – ZafarYousafi 2013-02-25 07:36:43

3
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

除了有关处理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 
+1

这应该被添加到正确的答案,因为它是相当重要的信息。 – Santhos 2015-12-14 10:00:22

1

ToString()不能处理空值和convert.ToString()能够处理它们是空值,所以当你想让你的系统来处理空值使用convert.ToString()

1

该方法“基本上”相同,除了处理null

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

从MSDN:
Convert.ToString Method

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

Object.ToString

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

+0

“什么都不打印”?什么都没有? 'null',''“''或'”null“'? – weston 2015-12-15 16:54:56

1

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

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

1
ToString() Vs Convert.ToString() 

相似点: -

两个都用一个特定的类型转换为字符串即INT串,浮到字符串或一个字符串的对象。

差异: -

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. 
     } 
    } 
} 
+0

'Convert.ToString'不处理'Null异常'。它只是做:'返回值== null? string.Empty:value.ToString()' – Fabio 2017-01-10 17:01:21

1

我@瑞安的答案达成一致。顺便说一句,从C#6.0为这个目的,你可以使用:

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

$"{someString}"; // bad practice, but this is the most concise option 

Convert.ToString(someString); 
相关问题