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

Tin*_*Tin 149 c# tostring type-conversion

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

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

Rya*_*yan 220

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

  • 你想`null`返回一个空字符串或抛出异常?这有点像转换和使用`as`:静默转换之间的区别. (4认同)
  • 好..因为这个特殊的原因只有他们使用.两种方法? (3认同)

Chr*_*yer 61

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

  • @Roshe是的,我对此感到满意.如果参数为"null",`Convert.ToString(string value)`返回`null`.如果参数为"null",`Convert.ToString(object value)`返回`String.Empty`. (4认同)
  • @Nilaa你可能想打开另一个问题,而不是评论.我的第一个问题是当arg为null时它会返回什么*?我的第一个想法是"arg"实际上已经是"string"类型,所以你要调用Convert.ToString(...)的重载,只返回传递给它的内容.该讨论涉及该方法的"对象"过载. (2认同)

Ale*_*der 21

除了关于处理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();
    }
}
Run Code Online (Sandbox Code Playgroud)

结果:

Convert.ToString(new FormattableType()); // 0.42
new FormattableType().ToString();        // 0,42
Run Code Online (Sandbox Code Playgroud)

  • 作为补充 - 基于[参考源](https://referencesource.microsoft.com/#mscorlib/system/convert.cs,1801)`IConvertible`优先于`IFormattable`,后者优先于` Object.ToString()`实现. (2认同)

小智 11

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

int i= 0;
MessageBox.Show(i.ToString());
MessageBox.Show(Convert.ToString(i));
Run Code Online (Sandbox Code Playgroud)

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

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

  • 你的例子有点无效,因为int永远不能为null (10认同)

小智 6

您可以创建一个类并覆盖该toString方法以执行您想要的任何操作.

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

Convert.toString转换为指定的值到它的等效的字符串表示.

  • Convert.ToString实际上是一个检查null的安全方法,如果value不为null,它只需在其上调用ToString方法.所以在任何情况下,如果你有覆盖ToString方法,你的覆盖ToString方法将被调用. (2认同)

hdo*_*men 6

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

Pen pen = null; 
Convert.ToString(pen); // No exception thrown
pen.ToString(); // Throws NullReferenceException
Run Code Online (Sandbox Code Playgroud)

来自 MSDN:
Convert.ToString 方法

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

对象到字符串

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


小智 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
Run Code Online (Sandbox Code Playgroud)


And*_*yWD 5

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

someString?.ToString() ?? string.Empty;
Run Code Online (Sandbox Code Playgroud)

或者

$"{someString}"; // I do not recommend this approach, although this is the most concise option.
Run Code Online (Sandbox Code Playgroud)

代替

Convert.ToString(someString);
Run Code Online (Sandbox Code Playgroud)