【发布时间】:2009-10-14 09:02:59
【问题描述】:
object obj = "Hello";
string str1 = (string)obj;
string str2 = obj.ToString();
(string)obj 和 obj.ToString() 有什么区别?
【问题讨论】:
-
正如我在对纪尧姆的评论中提到的,这与拳击无关。 String 是一种引用类型 - 不需要装箱。
标签: c#
object obj = "Hello";
string str1 = (string)obj;
string str2 = obj.ToString();
(string)obj 和 obj.ToString() 有什么区别?
【问题讨论】:
标签: c#
(string)objcastsobj 变成string。 obj 必须已经是 string 才能成功。obj.ToString() 通过调用ToString() 方法获得obj 的字符串表示。当obj 是string 时,它本身就是obj。这(应该)永远不会抛出异常(除非 obj 恰好是 null,显然)。所以在你的具体情况下,两者都是等价的。
请注意,string 是 reference type(而不是 value type)。因此,它继承自 object,并且不会出现 boxing。
【讨论】:
obj 为空(即使它是空字符串),那么 obj.ToString() 将抛出异常。相反,您可以使用obj?.ToString(),如果obj 为空,它会产生相同的效果并且不会抛出异常
如果有任何帮助,您可以使用类似于强制转换但在任何转换失败时返回 null 而不是异常的“as”运算符。
string str3 = obj as string;
【讨论】:
在最基本的层面上:
(string)obj 将尝试将obj 转换为string,如果没有有效的转换将失败。
obj.ToString() 将返回 string 的设计者 obj 已决定代表该对象。默认返回obj的类名。
【讨论】:
(string)obj 转换对象,如果 obj 不为 null 且不是字符串,则会失败。
obj.ToString() 将 obj 转换为字符串(即使它不是字符串),如果 obj 为 null,它将失败,因为它是一个方法调用。
【讨论】:
ToString() 是对象类方法(.net 中的主要父类),即使您没有从它继承,也可以在继承自对象类的类中重载它。
(string) 是强制转换,可以在它自己的类中实现,字符串类所以你没有能力。
【讨论】: