2009-10-14 9 views
23
object obj = "Hello"; 
string str1 = (string)obj; 
string str2 = obj.ToString(); 

(string)objobj.ToString()の違いは何ですか? string文字列とキャストToStringのキャスト

+4

私はGuillaumeに私のコメントで述べたように、これはボクシングとは関係ありません。文字列は参照型です。ボクシングの必要はありません。 –

+1

[Casting vsオブジェクトを実際に文字列に変換するときに、オブジェクトをtoStringに変換することについての可能な複製](http://stackoverflow.com/questions/1170756/casting-vs-converting-an-object-trend-when-object-really- –

答えて

28
  • (string)objcastsobj。これが成功するには、objがすでにstringである必要があります。
  • obj.ToString()ToString()メソッドを呼び出してobjの文字列表現を取得します。 objstringの場合、それ自体はobjです。これは決して例外をスローしてはなりません。

具体的には、どちらも同じです。

は、reference typevalue typeとは対照的に)であることに注意してください。したがって、オブジェクトから継承し、boxingはこれまでに発生しません。

(string)objstringobjをキャストしようとすると、有効な変換がない場合に失敗します。最も基本的なレベルで

+0

注意すべきことは、obj、str1およびstr2はすべて同じオブジェクトを参照することです。文字列であるオブジェクトを文字列に明示的にキャストすると、オブジェクト参照自体が返されます。 –

+5

オブジェクトは必ずしも成功するための文字列である必要はありません。明示的な変換演算子が定義されている場合にも機能します。 –

+1

変換演算子については明らかです。しかし、混乱しないように、私はコメントに残しておきます。これを指摘してくれてありがとう。 – Mac

7

obj.ToString()objのデザイナーが決定したstringが返されます。デフォルトでは、クラス名はobjです。

2

(string)objオブジェクトをキャストし、objがnullでなく文字列でない場合は失敗します。

obj.ToString()は(たとえ文字列でなくても)objを文字列に変換すると、それはメソッド呼び出しとしてobjがnullになります。

1

ToString()は、継承しなかったオブジェクトクラスから継承するクラスでオーバーロードされるオブジェクトクラスメソッド(.NETのメインの親クラス)です。

(文字列)は、クラス自体で実装することができるキャストです。文字列クラスなので、能力はありません。

7

もしも助けがあれば、キャストと似た 'as'演算子を使うことができますが、変換に失敗した場合は例外の代わりにnullを返します。

string str3 = obj as string; 
関連する問題