[C#] オブジェクトの型チェック
Object 型の型チェックは様々な方法があるが、is で判定する方法がよくとられる。
ToString() の対象となる変数が null であるため、ToString() メソッドにアクセスできないためだ。
参照型であるなら、as でキャストする方法もある。
これはチェック目的というよりも、とりあえず値を変換したい場合か。
as は int などの値型には使用できない。
で、TryParse を使おうとすると、TryParse は string 型の引数しか取れないことにぶち当たる。
ToString() などとやってしまうと……例外が発生する可能性がある。ならば Convert なら。Convert ならなんとかしてくれるはずだとこう書く。
しかし、何をやりたいのかわからなくなってくるw
結局、型のチェックをするという構造自体まず避けるべきだし、チェックをかけるなら is で。
また、キャストも色々と方法があるが、ToString() で落ちてしまうようなソースにならないよう、はじめにちゃんと考えるべきなのだろう。
object obj = null; if (obj is string) { } // false空文字か null かのチェックをするケースもよくするが、うっかりこう書いてしまうと危険だ。
object obj = null; if (string.IsNullOrEmpty(obj.ToString())) { // 例外が発生する。 }これは null を参照してしまうケース。
ToString() の対象となる変数が null であるため、ToString() メソッドにアクセスできないためだ。
参照型であるなら、as でキャストする方法もある。
これはチェック目的というよりも、とりあえず値を変換したい場合か。
object obj = null; string s = obj as string; // s = null変換できない場合、代入先の変数には null になる。
as は int などの値型には使用できない。
で、TryParse を使おうとすると、TryParse は string 型の引数しか取れないことにぶち当たる。
ToString() などとやってしまうと……例外が発生する可能性がある。ならば Convert なら。Convert ならなんとかしてくれるはずだとこう書く。
object obj = null; int i; if (int.TryParse(Convert.ToString(obj), out i)) { }Convert は変換できない場合は勝手に空文字にしてくれる。
しかし、何をやりたいのかわからなくなってくるw
結局、型のチェックをするという構造自体まず避けるべきだし、チェックをかけるなら is で。
また、キャストも色々と方法があるが、ToString() で落ちてしまうようなソースにならないよう、はじめにちゃんと考えるべきなのだろう。