重複の可能性:
CLRでの「as」キーワードのキャストと使用
キャストについてはたくさん質問があるのは知っていますが、この2つのキャストの具体的な名前がわからないので、どこを見ればよいのかわかりません。以下の2つのキャストの違いは何ですか?
TreeNode treeNode = (TreeNode)sender; // first cast
TreeNode treeNode = (sender as TreeNode); //second cast
重複の可能性:
CLRでの「as」キーワードのキャストと使用
キャストについてはたくさん質問があるのは知っていますが、この2つのキャストの具体的な名前がわからないので、どこを見ればよいのかわかりません。以下の2つのキャストの違いは何ですか?
TreeNode treeNode = (TreeNode)sender; // first cast
TreeNode treeNode = (sender as TreeNode); //second cast
最初のタイプのキャストは「明示的キャスト」と呼ばれ、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リファレンスを参照してください。
sender
がaでない場合TreeNode
、最初の1つは例外をスローし、2つ目は例外を返しますnull
。