object obj = "Hello";
string str1 = (string)obj;
string str2 = obj.ToString();
(string)obj
とobj.ToString()
の違いは何ですか? string
に文字列とキャストToStringのキャスト
object obj = "Hello";
string str1 = (string)obj;
string str2 = obj.ToString();
(string)obj
とobj.ToString()
の違いは何ですか? string
に文字列とキャストToStringのキャスト
(string)obj
castsobj
。これが成功するには、obj
がすでにstring
である必要があります。obj.ToString()
はToString()
メソッドを呼び出してobj
の文字列表現を取得します。 obj
がstring
の場合、それ自体はobj
です。これは決して例外をスローしてはなりません。具体的には、どちらも同じです。
は、reference type(value typeとは対照的に)であることに注意してください。したがって、オブジェクトから継承し、boxingはこれまでに発生しません。
(string)obj
がstring
にobj
をキャストしようとすると、有効な変換がない場合に失敗します。最も基本的なレベルで
注意すべきことは、obj、str1およびstr2はすべて同じオブジェクトを参照することです。文字列であるオブジェクトを文字列に明示的にキャストすると、オブジェクト参照自体が返されます。 –
オブジェクトは必ずしも成功するための文字列である必要はありません。明示的な変換演算子が定義されている場合にも機能します。 –
変換演算子については明らかです。しかし、混乱しないように、私はコメントに残しておきます。これを指摘してくれてありがとう。 – Mac
。
obj.ToString()
obj
のデザイナーが決定したstring
が返されます。デフォルトでは、クラス名はobj
です。
(string)objオブジェクトをキャストし、objがnullでなく文字列でない場合は失敗します。
obj.ToString()は(たとえ文字列でなくても)objを文字列に変換すると、それはメソッド呼び出しとしてobjがnullになります。
ToString()は、継承しなかったオブジェクトクラスから継承するクラスでオーバーロードされるオブジェクトクラスメソッド(.NETのメインの親クラス)です。
(文字列)は、クラス自体で実装することができるキャストです。文字列クラスなので、能力はありません。
もしも助けがあれば、キャストと似た 'as'演算子を使うことができますが、変換に失敗した場合は例外の代わりにnullを返します。
string str3 = obj as string;
私はGuillaumeに私のコメントで述べたように、これはボクシングとは関係ありません。文字列は参照型です。ボクシングの必要はありません。 –
[Casting vsオブジェクトを実際に文字列に変換するときに、オブジェクトをtoStringに変換することについての可能な複製](http://stackoverflow.com/questions/1170756/casting-vs-converting-an-object-trend-when-object-really- –