C#のobject型でBool型チェック

先日行われた2016年10月度の勉強会にて、
RubyやPythonでのbool型チェックが簡単にできないというネタがありました。

そこで、C#ではどうだったかなと思い試してみました。

// 実装

今回は、拡張メソッドでobject型にIsBoolというbool型かどうかを確認できるように実装してみました。

Ref. MSDN 拡張メソッド (C# プログラミング ガイド)
Ref. MSDN is (C# リファレンス)

public static bool IsBool(this object obj)
{
return (obj is bool);
}

さて、これで完成です。
実際に使う場合は、下記のようなコードになります。

object obj = new object();
bool result = obj.IsBool(); // false

// 実行結果

実際に実行してみた結果が下図です。

Bool型かどうかの判定

// まとめ

ということで、何もなく実装できてしまいました。

C#では、言語側で“obj is type”“objがnull以外でtype型と互換性があるかどうか”
bool型で返してくれるというありがたい機能が実装されているため、問題になりませんでしたが、
他の言語だとこういう問題もあるんだなと改めて言語間の違いを感じました。

わざわざ拡張メソッドなんて定義しなくてもよかったのですが、まぁ、何事も経験だと思いますで…

また、今回の実装によってobject型に対しても拡張メソッドが実装できる、
ということを新たに知ることができました。

今まで試したことがなかったのですが、これならあの忌々しいDBNullチェックも

obj.IsDBNull()

obj.IsDBNullOrNothing()

のように実装できるんですねぇ。