2

重複の可能性:
CLRでの「as」キーワードのキャストと使用

キャストについてはたくさん質問があるのは知っていますが、この2つのキャストの具体的な名前がわからないので、どこを見ればよいのかわかりません。以下の2つのキャストの違いは何ですか?

TreeNode treeNode = (TreeNode)sender; // first cast
TreeNode treeNode = (sender as TreeNode); //second cast
4

2 に答える 2

12

最初のタイプのキャストは「明示的キャスト」と呼ばれ、2番目のキャストは実際にはas演算子を使用した変換であり、キャストとは少し異なります。

オブジェクトが指定されたタイプでない場合、明示的なキャスト(type)objectInstanceはをスローします。InvalidCastException

// throws an exception if myObject is not of type MyTypeObject.
MyTypedObject mto = (MyTypedObject)myObject;

オブジェクトが指定されたタイプでない場合、asオペレーターは例外をスローしません。単に戻りnullます。オブジェクトが指定されたタイプの場合、as演算子は変換されたタイプへの参照を返します。as演算子を使用するための一般的なパターンは次のとおりです。

// no exception thrown if myObject is not MyTypedObject
MyTypedObject mto = myObject as MyTypedObject; 
if (mto != null)
{
    // myObject was of type MyTypedObject, mto is a reference to the converted myObject
}
else
{
    // myObject was of not type MyTypedObject, mto is null
}

明示的なキャストと型変換の詳細については、次のMSDNリファレンスを参照してください。

于 2012-12-10T17:11:27.773 に答える
7

senderがaでない場合TreeNode、最初の1つは例外をスローし、2つ目は例外を返しますnull

于 2012-12-10T17:07:20.257 に答える