object obj = "Hello";
string str1 = (string)obj;
string str2 = obj.ToString();
在C#中,(string)obj
和obj.ToString()
有什么区别?
object obj = "Hello";
string str1 = (string)obj;
string str2 = obj.ToString();
在C#中,(string)obj
和obj.ToString()
有什么区别?
(string)obj
将obj
强制转换 为string
。为了成功,obj
必须已经是string
。obj.ToString()
通过调用ToString()
方法获取obj
的字符串表示形式。当obj
是string
时,它本身就是obj
。这不会(应该不会)抛出异常(除非obj
恰好为null
)。因此,在您的特定情况下,两者是等价的。
obj
为空(即使它是一个空字符串),那么obj.ToString()
将会抛出异常。相反,您可以使用obj?.ToString()
,它将产生相同的效果,并且如果obj
为空,则不会抛出异常。 - derekantrican如果有帮助的话,可以使用“as”运算符,它类似于强制类型转换,但在任何转换失败时返回null而不是异常。
string str3 = obj as string;
在最基本的水平上:
(string)obj
尝试将 obj
强制转换为一个 string
,如果没有有效的转换则会失败。
obj.ToString()
返回一个 string
,这个字符串是 obj
的设计者决定代表该对象的。默认情况下它返回 obj
的类名。
(string)obj将对象转换为字符串,如果obj不是null并且不是字符串,则转换失败。
obj.ToString()将obj转换为字符串(即使它不是字符串类型),如果obj为空则转换会失败,因为这是一个方法调用。
ToString()是对象类的方法(.net中的主要父类),即使您没有继承它,也可以在从对象类继承的类中重载它。
(string)是强制转换,可以在类本身,即字符串类中实现,因此您无法对其进行操作。