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

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

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

【问题讨论】:

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

标签: c# type-conversion tostring


【解决方案1】:

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

【讨论】:

  • 好.. 出于这个特定原因,只有他们使用。两种方法?
  • 另外,半相关的,请参阅此答案以获取更多详细信息:stackoverflow.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(),会导致异常

                      【讨论】:

                        猜你喜欢
                        • 2019-04-27
                        • 1970-01-01
                        • 1970-01-01
                        • 2012-04-24
                        • 1970-01-01
                        • 2011-01-07
                        • 2011-02-22
                        • 1970-01-01
                        • 1970-01-01
                        相关资源
                        最近更新 更多