- ベストアンサー
vb.netの型変換について
- VB.netの型変換について詳しく解説します。
- DirectCastとCtypeの違い、CstrとToStringとConvertの違いについて解説します。
- VB.netでの型変換の使い分けや、継承関係による選択方法について紹介します。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
>・継承関係にあるObject型に変換するならDirectCastがよい。 「継承関係にあるObject型に変換」ってどういう意味ですか? 全てのクラスはObject型を継承しています。(だからこそObject型の 変数を用意すれば型変換なしに何でも代入できてしまうわけですが。) ほぼ意味の無い表現ですよこれ。 「オブジェクトに変換」という意味で使ったんでしょうか? 「Object型」というものが定義されている以上、意味が変わってしまいますよ。 >・継承関係にない型変換の場合は、Ctypeがよい。 DirectCast の方がパフォーマンスに優れているのだから、DirectCast が使えるなら使った方がよいです。「良い悪い」では無く「出来る出来ない」 のレベルで違いがあるので、この理解の仕方では本末転倒です。 DirectCast の使い方が理解できない初心者向けの一時しのぎの解釈として、 CTypeで統一しておくというのはあると思います。 可読性とか、統一する事で検索し易くして保守性を上げる人もいるかもしれ ません。少数派だと思いますが。 >・Cstr、ToString、convertは、nullやNothingをどう扱うかによって使い分ければよい 対象の値がnullやNothingの場合にエラーになるならないの違いはありますが、 エラートラップすればいいだけなので、どの関数でも同等のプログラムは 書けます。nullやNothingの処理が関数の仕様どおりなら使った方がスッキリ 書けるでしょうが、nullやNothingが入ってきてる時点で問題がある場合が 多いので、Convert.ToStringで変換してしまうのは、そういった仕様が明確に なっている場合のみに限定する事をお勧めします。 あとは、コーディングルールを決めているならそれに従えばいいですし、 オブジェクト指向的な概念を重要視すれば、ToStringはオブジェクトが 主体。Convert.~は変換が主体。CStrは手続き型なのでオブジェクト指向 ではないと言えます。 オブジェクトを文字列に変換する場合に、内部的には ToString が呼ばれて いる場面が多々あります。ToString を使えるのが統一的な処理を書ける場合が 多いです。オーバーライドしてリスト系のコントロールに表示される文字列を カスタマイズするテクニックなどがあります。 CStrはVB6世代のコーディングなので、VB.NETの概念的には使わない方がいいの ですが、VB用に最適化されているのでパフォーマンスが向上することがあります。 私は使いません。 そもそも型変換において重要な点には、拡大変換と縮小変換があり、 VBは勝手に暗黙的な型変換を試みるので、変換元から変換先へ、どのような 変換規則が適用されるかを知っていないと判断なんてできませんが。 私の結論としては、勉強する気が無いなら CType と ToString 使っとけです。