2012-02-09 7 views
3

私は仕事のためにSharePoint 2010を読んできました。私は書籍からインストラクションビデオにいたるまでの多くのコード例が、C#で知られていなかった方法でSharePointオブジェクトをキャストしていることに気づきました。 :(<T>)ではなく「As」でキャスティングしていますか?

SPWeb web = properties.Feature.Parent as SPWeb;

私は(VBの外で)このよう(SPWeb)properties.Feature.Parentをキャストするために使用し、私はVB-風のキャスト表記の使用に遭遇してきたのSharePoint上のほとんどの作品、特定の理由があった場合だけ興味があったんです。

+0

この質問はSharepointとはまったく関係がありません。再タグ付けすることをお勧めします。私はC#タグを追加しました。 – driis

+0

ありがとう、これは私がこれまでにポップアップしたのを見た唯一の場所なので、SharePointのベストプラクティスだと思った。 – EHorodyski

+1

http:// stackoverflow。com/questions/496096/casting-vs-using-the-clr: –

答えて

6

asは、C#で安全キャスト演算子と呼ばれます。それと普通のキャストとの間に意味的な違いがあります。型をキャストできない場合、安全なキャストは例外をスローしません。 nullを返します。タイプをキャストできない場合、通常のキャストはInvalidCastExceptionをスローします。親が正しいタイプでない場合、他のバージョンがスローながら

SPWeb web = properties.Feature.Parent as SPWeb; 

SPWeb web = (SPWeb)properties.Feature.Parent; 

asすなわち

、このコードはnull親あればならないタイプSPWebのを割り当てます演算子は、オブジェクトが目的の型にキャストできるかどうかわからない場合には非常に便利です。この場合は、asを使用してnullをチェックするのが一般的です。 asは、値型をnullにすることはできないため、参照型に対してのみ機能します。

これは、this longer article on MSDNでも説明されています。

ところで、VBの等価演算子はTryCast(対DirectCast)です。

+0

ありがとう、これは、警告ラベルに記載する必要があるそれらの不明瞭の1つのようです! – EHorodyski

+0

「as」はシンタックスシュガーであることに注意することも重要です。 – Zenexer

1

キーワードに設定すると、親のタイプがSPWebではない場合、変数ウェブがnullに設定されます。

親としての型がSPWebでない場合、明示的なキャストによって例外がスローされます。

1

"as"は、指定された型またはnullとして値を返すため、(キャスト)より安全です。 次の行はnullをテストする(またはテストする)必要があります。

1

キャストはに割り当てられた変数は、例外をスローするにはnull反対になっ失敗した場合は「InvalidCastExceptionが」

2
obj as T 

obj is T ? (T)obj : null 

の構文糖であるしたがって、それは「安全」のキャストです。しかし、理論的には時間がかかります。したがって、オブジェクトが期待される型でない場合は、特にnullを必要としない限り、通常のキャストを使用する必要があります。多くの場合、手動で処理するほうがよいでしょう。

if (!(obj is T)) 
{ 
    // Handle the case where obj is of an unexpected type. 
} 

T tobj = (T)obj; 
関連する問題