【发布时间】:2010-11-11 07:30:17
【问题描述】:
object o;
o.ToString() 和 (string) o 有什么区别吗?
【问题讨论】:
-
你为什么要问?愿意解释大局吗?
object o;
o.ToString() 和 (string) o 有什么区别吗?
【问题讨论】:
有区别,是的。每个对象都有一个ToString 方法,但不是每个对象都可以转换为字符串。
int i = 10;
string s1 = i.ToString(); // OK
string s2 = (string)i; // Compile error.
object o = 10;
string s3 = o.ToString(); // OK
string s4 = (string)o; // Runtime error.
【讨论】:
ToString() 对象为null 时会引发异常,(string) 不会转换。
【讨论】:
如果您在从对象到字符串的安全转换之后,只需使用:
string s = Convert.ToString(o);
【讨论】:
object.ToString() 会将对象转换为字符串。如果对象有空值,那么它会抛出一个异常,因为没有空值有ToString()方法。
而(string)object 是引用类型到值类型的拆箱过程。
这里object 值正在复制到字符串类型的新实例中。
如果那个object 为空,它将分配空值。
【讨论】:
是的,它们都非常不同。
string anObjectString = (string)anObject; 是一个类型转换或类型转换只有在类型转换是一个有效的情况下才会成功
ToString() 是框架中所有对象都可用的方法。它是一个虚方法,默认实现会返回对象的类型名称。
我们在这里比较苹果和橘子..
【讨论】:
是的,ToString() 是每个类型都实现的方法(因为每个类型都继承自实现该方法的 System.Object)。某些类型可能会覆盖此方法以提供自己的自定义覆盖实现。对ToString() 的调用应该始终成功并返回一个字符串实例(尽管对于某些实现它可能为空)。
var x = new AnyArbitraryObjectType();
var y = x.ToString(); // will always succeed (if ToString has not been overridden, or if it has been overridden properly)
强制转换是将给定对象引用转换为类型为字符串的引用。如果要转换的引用不是字符串,则转换将失败。
var a = "hello";
var b = 5;
var x = (string)a; // will succeed
var y = (string)b; // will fail with InvalidCastException
【讨论】:
基本上 ToString() 是一个函数,它返回一个字符串,表示您应用它的对象。
作为类型的字符串就像一个 int - 一个原始类型(在 c# 中它是一个对象)
【讨论】: