c# Convert.ToString 与 .ToString() 有什么区别?

piao20040506 2008-04-28 03:38:36
请各位指教!!
...全文
5806 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
专业搬砖填坑 2012-08-10
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

你试着运行一下下面的代码就知道了
C# code
object v = null;
Console.WriteLine(Convert.ToString(v));
Console.WriteLine(v.ToString());



Convert对于null值不会抛出异常,而直接用ToString的话就会有异常.

并且Convert能自动根据值的类型是否已实现IConvertible或IFormattable接口自动调用接口实现方法.

而ToString则未必会有这种效果!!(除非此方法已被重写),示例:


C# code

namespace ConsoleApplication1
{
public class ConvertTest
: IFormattable
{

#region IFormattable 成员
public string ToString(string format, IFormatProvider formatProvider)
{
return "This is formattable string";
}
#endregion
}

class Test
{
static void Main()
{
ConvertTest v = new ConvertTest();
Console.WriteLine(Convert.ToString(v));
Console.WriteLine(v.ToString());

Console.Read();
}
}
}



输出结果如下:
This is formattable string
ConsoleApplication1.ConvertTest
[/Quote]


这个不错,谢谢了。。
专业搬砖填坑 2012-08-10
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

你试着运行一下下面的代码就知道了
C# code
object v = null;
Console.WriteLine(Convert.ToString(v));
Console.WriteLine(v.ToString());



Convert对于null值不会抛出异常,而直接用ToString的话就会有异常.

并且Convert能自动根据值的类型是否已实现IConvertible或IFormattable接口自动调用接口实现方法.

而ToString则未必会有这种效果!!(除非此方法已被重写),示例:


C# code

namespace ConsoleApplication1
{
public class ConvertTest
: IFormattable
{

#region IFormattable 成员
public string ToString(string format, IFormatProvider formatProvider)
{
return "This is formattable string";
}
#endregion
}

class Test
{
static void Main()
{
ConvertTest v = new ConvertTest();
Console.WriteLine(Convert.ToString(v));
Console.WriteLine(v.ToString());

Console.Read();
}
}
}



输出结果如下:
This is formattable string
ConsoleApplication1.ConvertTest
[/Quote]


这个不错,谢谢了。。
hanjoe109 2008-09-23
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 fangxinggood 的回复:]
多谢LGame的指正。DBNull.Value.ToString()的确没有异常发生。

但是我认为使用Convert.ToString()不需要判断是否是null。

楼主问的Convert.ToString 和 .ToString()的区别,不是说用哪一个更好的说。

各有各的使用的场合。
[/Quote]

btnUpdate.Tag.ToString();如果Tag為空,則會報異常
meiZiNick 2008-04-30
  • 打赏
  • 举报
回复
以后需再关注,现在先帮你顶一下
kingthy 2008-04-28
  • 打赏
  • 举报
回复
你试着运行一下下面的代码就知道了
            object v = null;
Console.WriteLine(Convert.ToString(v));
Console.WriteLine(v.ToString());


Convert对于null值不会抛出异常,而直接用ToString的话就会有异常.

并且Convert能自动根据值的类型是否已实现IConvertible或IFormattable接口自动调用接口实现方法.

而ToString则未必会有这种效果!!(除非此方法已被重写),示例:



namespace ConsoleApplication1
{
public class ConvertTest
: IFormattable
{

#region IFormattable 成员
public string ToString(string format, IFormatProvider formatProvider)
{
return "This is formattable string";
}
#endregion
}

class Test
{
static void Main()
{
ConvertTest v = new ConvertTest();
Console.WriteLine(Convert.ToString(v));
Console.WriteLine(v.ToString());

Console.Read();
}
}
}


输出结果如下:
This is formattable string
ConsoleApplication1.ConvertTest

这下知道这两者之间的差别了吧?
机器人 2008-04-28
  • 打赏
  • 举报
回复
多谢LGame的指正。DBNull.Value.ToString()的确没有异常发生。

但是我认为使用Convert.ToString()不需要判断是否是null。

楼主问的Convert.ToString 和 .ToString()的区别,不是说用哪一个更好的说。

各有各的使用的场合。
cc_net 2008-04-28
  • 打赏
  • 举报
回复

//Convet中的ToString方法
public static string ToString(int value)
{
return value.ToString(); //调用int的ToString方法
}

//int32的ToString方法1
public override string ToString()
{
return this.ToString(null, null);
}

//int32的ToString方法2
public string ToString(string format, IFormatProvider provider)
{
return Number.FormatInt32(this.m_value, format, NumberFormatInfo.GetInstance(provider));
}






看了这个你就明白了把,实际Convet调用的是Int里的ToString方法。这是ToString方法比较特殊。

基元类型没有公开IConvertible 接口的实现,所以不能直接使用Toint(),ToChar()等方法来进行基元之间的转换
但他通过Convert类来转换,真正的实现都是在Convert中,基元类型IConvertible 接口的实现只是调用Convert中的实习方法。而Tostring正好和这个相反,他的实现在基元类型中,而不是Convert中。

不在各自类型中直接实现IConvertible接口,直接提供接口调用,而是在Convert类中提供了方法。我觉得是因为接口是引用类型,将一个未装箱的值类型实例转型为一个该实例实现的接口类型也需要对该实例进行装箱。如果直接使用接口,会因为装箱导致性能损失。而使用Convert类来实现,就解决了这个问题。

而对于String本来就是引用类型,而且使用比较多,所以可以直接使用ToString()

个人观点,欢迎指正
LGame 2008-04-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fangxinggood 的回复:]
Convert.ToString() 把Object转换成String对象。
可以把DBNull/Null转化为String.Empty

Object.ToString() 是从Object里继承来的方法。对于空引用和DBNull的对象直接调用.ToString()会引发异常。
[/Quote]

我试了试!!

Convert.ToString(DBNull.value)

DBNull.value.toString()

的结果是一样的!!!

个人认为

用.toString()这个方法好

xiaobenben_net 2008-04-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fangxinggood 的回复:]
Convert.ToString() 把Object转换成String对象。
可以把DBNull/Null转化为String.Empty

Object.ToString() 是从Object里继承来的方法。对于空引用和DBNull的对象直接调用.ToString()会引发异常。
[/Quote]
学习
wisdomqq 2008-04-28
  • 打赏
  • 举报
回复
后一个是通过object.ToString()方法转换成字符串

前一个是对上面这种方法的一个包装,提供一种统一的静态方法,事实上内部还是调用上面那个.ToString()
c863123 2008-04-28
  • 打赏
  • 举报
回复
up
Tassadar1979 2008-04-28
  • 打赏
  • 举报
回复
Convert.ToString

是指把某某类型转化成string.
比如byte[]的反序列化.

tostring()
是基类的函数.
可能被重写,但很多时候含义不一样.

机器人 2008-04-28
  • 打赏
  • 举报
回复
Convert.ToString() 把Object转换成String对象。
可以把DBNull/Null转化为String.Empty

Object.ToString() 是从Object里继承来的方法。对于空引用和DBNull的对象直接调用.ToString()会引发异常。

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧