
初めまして。
現在、vb.netを使用して開発しているのですが、
DirectCastやCtypeなど、どの場合にどの関数を使うべきかがよくわかりません、
よろしければ、以下の点について、教えていただけませんか?
教えて欲しいこと
・DirectCastとCtypeの違いについて
・CstrとToStringとconvertの違いについて
・上記の2つについて、どの場合に使い分ければよいかについて
上記のことが纏まっているサイトがあれば、そのサイトも紹介してほしいです。
自分なりに調べた結果
・継承関係にあるObject型に変換するならDirectCastがよい。
・継承関係にない型変換の場合は、Ctypeがよい。
・Cstr、ToString、convertは、nullやNothingをどう扱うかによって使い分ければよい
以上、よろしくお願い致します。
No.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 使っとけです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
Designer.vbは直接コードをいじってはだめ?
Visual Basic(VBA)
-
CloseとDisposeの違い
Visual Basic(VBA)
-
Form_Load と Form_Activate のタイミング
Visual Basic(VBA)
-
-
4
.NET SqlDataReader のレコード有無判定
Visual Basic(VBA)
-
5
textboxユーザーコントロールのコピー&ペースト制御
Visual Basic(VBA)
-
6
String"から型'Double'への変換は無効です。 とエラーが出ます。
Visual Basic(VBA)
-
7
DataGridViewで表示に制限をつけたい。
Visual Basic(VBA)
-
8
VB.NET getとsetの概念がわかりません。
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
家電製品の電力周波数を変える機械
-
分を時間に変換するプログラム
-
エクセルのvbaで検索ボタンを作る
-
VB 6 を VS 2012に変換するには?
-
EUCからUTF-8へのコード変換
-
Excel(全シート) → PDF変換を...
-
COMP-3
-
なぜ通信には16進数文字列が使...
-
C#でのpngからbmpへの変換について
-
文字コードの変換
-
エクセルVBAの自動変換機能?
-
10進数を2進数に変換するプログ...
-
線対称の角度を求める
-
sgmlからXMLへの変換
-
InternetOpenUrlの引数URL文字...
-
C言語からC#への変換ツール
-
XSLTでの変換後のソース
-
C/C++→JAVAに変換するツール
-
CIDコードからUNICODEへの変換...
-
Microsoft office IME2007について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
家電製品の電力周波数を変える機械
-
Mac 乗数の入力方法
-
3のつく数字と3の倍数のみを表...
-
エクセルVBAの自動変換機能?
-
VB.NETをJavaに変換するツール...
-
c++でmatからvectorへの変換の...
-
分を時間に変換するプログラム
-
緯度、経度の 10進法と 60進法...
-
逆コンパイルと逆アセンブルの...
-
なぜ通信には16進数文字列が使...
-
VB6からVB2010への変換について
-
10進数をBCDに変換する方法
-
C++からCへのソース変換について
-
VB6で10進数を32進数に変換する...
-
php
-
画像ファイル変換(Tiff→PDF)
-
VB.NETからJavaに変換するツー...
-
PHPで、日本語からアルファベッ...
-
WinHelpからHTML Helpに変換
-
マンセル⇔XYZ,RGB変換式或いは...
おすすめ情報