【问题标题】:Casting to string versus calling ToString转换为字符串与调用 ToString
【发布时间】:2009-10-14 09:02:59
【问题描述】:
object obj = "Hello";
string str1 = (string)obj;
string str2 = obj.ToString();

(string)objobj.ToString() 有什么区别?

【问题讨论】:

标签: c#


【解决方案1】:
  • (string)objcastsobj 变成stringobj 必须已经是 string 才能成功。
  • obj.ToString() 通过调用ToString() 方法获得obj 的字符串表示。当objstring 时,它本身就是obj。这(应该)永远不会抛出异常(除非 obj 恰好是 null,显然)。

所以在你的具体情况下,两者都是等价的。

请注意,stringreference type(而不是 value type)。因此,它继承自 object,并且不会出现 boxing

【讨论】:

  • 需要注意的一点是obj、str1和str2都引用了同一个对象。因此,将一个字符串对象显式转换为字符串,将返回对象引用本身。
  • 对象不一定必须是字符串才能成功。如果定义了显式转换运算符,它也可以工作。
  • 您对转换运算符显然是正确的。但为了不混淆,我会把它放在 cmets 中。感谢您指出这一点。
  • 如果 obj 为 null 则 ToString() 将抛出异常。
  • Rodolfo 是正确的 - 如果 obj 为空(即使它是空字符串),那么 obj.ToString() 将抛出异常。相反,您可以使用obj?.ToString(),如果obj 为空,它会产生相同的效果并且不会抛出异常
【解决方案2】:

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

string str3 = obj as string;

【讨论】:

  • 好点,here 适合那些想了解更多信息的人。
【解决方案3】:

在最基本的层面上:

(string)obj 将尝试将obj 转换为string,如果没有有效的转换将失败。

obj.ToString() 将返回 string 的设计者 obj 已决定代表该对象。默认返回obj的类名。

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:

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

      (string) 是强制转换,可以在它自己的类中实现,字符串类所以你没有能力。

      【讨论】:

        猜你喜欢
        • 2017-10-07
        • 1970-01-01
        • 2023-03-24
        • 2017-02-04
        • 2018-10-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-05
        相关资源
        最近更新 更多