将对象转换为字符串与调用ToString方法的区别

43
object obj = "Hello";
string str1 = (string)obj;
string str2 = obj.ToString();

在C#中,(string)objobj.ToString()有什么区别?


6
正如我在回复Guillaume的评论中提到的,这与拳击无关。String是一个引用类型 - 没有必要进行装箱操作。 - Jon Skeet
5个回答

49
  • (string)objobj 强制转换string。为了成功,obj必须已经是string
  • obj.ToString()通过调用ToString()方法获取obj的字符串表示形式。当objstring时,它本身就是obj。这不会(应该不会)抛出异常(除非obj恰好为null)。

因此,在您的特定情况下,两者是等价的。

请注意,string引用类型(与值类型相对)。因此,它继承自对象,不会发生任何装箱


1
需要注意的一点是,obj、str1和str2都引用了同一个对象。因此,将一个字符串对象显式转换为字符串,将返回对象本身的引用。 - Yannick Motton
9
一个对象不一定非得是字符串才能成功,如果定义了显式的转换运算符,它也可以起作用。 - Yannick Motton
1
你对于转换运算符的观点显然是正确的。但为了避免混淆,我会将其保留在注释中。感谢你指出这一点。 - Mac
5
如果对象为 null,则 ToString() 方法将抛出异常。 - Rodolfo
1
Rodolfo是正确的 - 如果obj为空(即使它是一个空字符串),那么obj.ToString()将会抛出异常。相反,您可以使用obj?.ToString(),它将产生相同的效果,并且如果obj为空,则不会抛出异常。 - derekantrican

18
如果有帮助的话,可以使用 "as" 运算符,它类似于强制类型转换,但在任何转换失败时返回 null 而不是异常。

如果有帮助的话,可以使用“as”运算符,它类似于强制类型转换,但在任何转换失败时返回null而不是异常。

string str3 = obj as string;

好的,这里是想要了解更多的人可以阅读的内容。 - Muhammad Musavi

9

在最基本的水平上:

(string)obj 尝试将 obj 强制转换为一个 string,如果没有有效的转换则会失败。

obj.ToString() 返回一个 string,这个字符串是 obj 的设计者决定代表该对象的。默认情况下它返回 obj 的类名。


2

(string)obj将对象转换为字符串,如果obj不是null并且不是字符串,则转换失败。

obj.ToString()将obj转换为字符串(即使它不是字符串类型),如果obj为空则转换会失败,因为这是一个方法调用。


1

ToString()是对象类的方法(.net中的主要父类),即使您没有继承它,也可以在从对象类继承的类中重载它。

(string)是强制转换,可以在类本身,即字符串类中实现,因此您无法对其进行操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接