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 是的,我只是被这个咬了。如果参数是null
,Convert.ToString(string value)
返回 null
。如果参数是 null
,Convert.ToString(object value)
返回 String.Empty
。【参考方案3】:
除了有关处理null
值的其他答案之外,Convert.ToString
在调用基Object.ToString
之前尝试使用IFormattable
和IConvertible
接口。
例子:
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)啥意思