回答:
C#でのキャストに関する一般的な質問については、まずジョンスキートの回答をご覧ください。
これをしないでください:
if (randomObject is TargetType) { TargetType foo = (TargetType) randomObject; // Do something with foo }
randomObjectがローカル変数ではなくフィールドである場合、これは2回チェックされるだけでなく、異なることをチェックする場合があります。別のスレッドが2つの間でrandomObjectの値を変更すると、「if」は合格するが、キャストが失敗する可能性があります。
(...)
randomObjectがTargetTypeのインスタンスであり、TargetTypeが参照型である場合、次のようなコードを使用します。
TargetType convertedRandomObject = randomObject as TargetType; if (convertedRandomObject != null) { // Do stuff with convertedRandomObject }
次に、同様のトピックを参照してください。