Convert.ToString()
和.ToString()
之间的区别是什么?
我在网上发现了很多差异,但主要区别是什么?
答案 0 :(得分:209)
Convert.ToString()
处理null
,而ToString()
则不处理。{/ p>
答案 1 :(得分:57)
在对象上调用ToString()
假定该对象不为null(因为需要存在一个对象来调用它上面的实例方法)。 Convert.ToString(obj)
不需要假定对象不为null(因为它是Convert类的静态方法),而是如果 为null则返回String.Empty
。
答案 2 :(得分:20)
除了有关处理null
值的其他答案之外,Convert.ToString
在调用base IFormattable
之前尝试使用IConvertible
和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
答案 3 :(得分:10)
让我们通过这个例子理解差异:
int i= 0;
MessageBox.Show(i.ToString());
MessageBox.Show(Convert.ToString(i));
我们可以使用i
或i.ToString ()
转换整数Convert.ToString
。那有什么区别?
它们之间的基本区别是Convert
函数处理NULLS而i.ToString ()
没有;它会抛出NULL引用异常错误。因此,使用convert
的良好编码实践始终是安全的。
答案 4 :(得分:6)
您可以创建一个类并覆盖toString
方法以执行任何操作。
例如,您可以创建一个类“MyMail”并覆盖toString
方法以发送电子邮件或执行其他操作,而不是编写当前对象。
Convert.toString
将指定的值转换为其等效的字符串表示形式。
答案 5 :(得分: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
答案 6 :(得分:4)
方法基本上是""同样,除了处理 null 。
Pen pen = null;
Convert.ToString(pen); // No exception thrown
pen.ToString(); // Throws NullReferenceException
来自MSDN:
Convert.ToString Method
将指定值转换为其等效的字符串表示形式。
返回表示当前对象的字符串。
答案 7 :(得分:3)
在Convert.ToString()
中,转换处理NULL
值,但.ToString()
处理NULL
值和NULL
引用异常错误。因此,优良作法是使用Convert.ToString()
。
答案 8 :(得分:3)
对于Code爱好者来说,这是最佳答案。
.............. 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)
答案 9 :(得分: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);
答案 10 :(得分:2)
Convert.ToString(strName)
将处理无效值,strName.Tostring()
将不处理空值并抛出异常。
所以最好使用Convert.ToString()
然后.ToString();
答案 11 :(得分:2)
ToString() Vs Convert.ToString()
相似之处: -
两者都用于将特定类型转换为字符串,即int转换为字符串,float转换为字符串或将对象转换为字符串。
差异: -
ToString()
无法处理null,而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.
}
}
}
答案 12 :(得分:2)
ToString()
无法处理空值,convert.ToString()
可以处理null值,因此当您希望系统处理空值时,请使用convert.ToString()
。
答案 13 :(得分:0)
要了解这两种方法,请举一个例子:
int i =0;
MessageBox.Show(i.ToString());
MessageBox.Show(Convert.ToString(i));
这两种方法都用于转换字符串,但是它们之间的基本区别是:Convert
函数处理NULL
,而i.ToString()
不处理它将抛出{{1} }因此,使用NULL reference exception error.
的良好编码习惯总是安全的。
让我们看看另一个示例:
convert
答案 14 :(得分:0)
Convert.ToString(value)
首先尝试将obj强制转换为IConvertible,然后IFormattable调用相应的ToString(...)
方法。相反,如果参数值为null
,则返回string.Empty
。最后,如果没有其他作用,请返回obj.ToString()
。
值得注意的是,例如Convert.ToString(value)
返回null的情况下,null
可以返回value.ToString()
。
答案 15 :(得分: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()'更快。
class System.Object
{
public string ToString(IFormatProvider provider)
{
return Number.FormatInt32(this, null, NumberFormatInfo.GetInstance(provider));
}
}
class System.Convert
{
public static string ToString(object value)
{
return value.ToString(CultureInfo.CurrentCulture);
}
}
答案 16 :(得分:0)
Convert.Tostring()函数处理NULL,而.ToString()方法则不处理。访问here。
答案 17 :(得分:0)
在C#中,如果您声明了字符串变量,并且没有为该变量分配任何值,则默认情况下该变量采用空值。在这种情况下,如果使用ToString()方法,则程序将引发null引用异常。另一方面,如果您使用Convert.ToString()方法,则您的程序将不会引发异常。
答案 18 :(得分:0)
Convert.Tostring()
基本上只是调用以下value == null ? String.Empty: value.ToString()
(string)variable
仅在您要投射的内容上存在隐式或显式运算符时 cast p>
ToString()
可以按类型覆盖(它可以控制所做的操作),如果不覆盖,则会产生类型的名称
很明显,如果对象为 null ,则无法访问实例成员ToString()
,它将导致异常
答案 19 :(得分:0)
对于可空类型,ToString()
实际上处理 null
值:
int? i = null;
var s1 = i.ToString(); // returns ""
var s2 = Convert.ToString(i); // returns ""
只是为了弥补现有的答案。
来源:
https://docs.microsoft.com/en-us/dotnet/api/system.nullable-1.tostring?view=net-5.0