
初めまして。
現在、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で質問しましょう!
似たような質問が見つかりました
- その他(コンピューター・テクノロジー) 【Tableau Desktop】文字列から8桁の数字を日付型(yyyyMMdd)として取得 1 2023/07/31 10:17
- Visual Basic(VBA) エクセルのマクロで対象ごとにシート分けしてその内容をセルに書き込みたい 9 2022/08/24 13:23
- Visual Basic(VBA) VBA リボンののリカバリーでオーバーフローエラーになります 2 2023/07/04 19:07
- 英語 関係形容詞"which"の感覚について 4 2022/12/05 11:46
- HTML・CSS WEBサイトの構築。表示データとWEBデザインを分離する考え方を専門用語・業界用語では何と言うか? 8 2022/09/27 09:16
- 英語 再帰代名詞の使用及び不使用条件について 2 2022/10/17 11:28
- Web・クリエイティブ 1.現在webデザイン系のサイト開発・運営してるのですが、サイト内ジャンルに「人間関係」を入れるor 1 2022/11/12 11:11
- 英語 総称的意味の「the+過去分詞」が無冠詞複数形で置き換えることができない理由について 5 2022/08/04 10:14
- アンテナ・ケーブル 家屋テレビ用アンテナ配線 4 2023/04/27 15:00
- その他(Microsoft Office) Excelの時間変換について 300(分)→5(時間) を5:00とする表記する方法は、ありますでし 3 2022/07/29 16:49
このQ&Aを見た人はこんなQ&Aも見ています
-
CloseとDisposeの違い
Visual Basic(VBA)
-
Designer.vbは直接コードをいじってはだめ?
Visual Basic(VBA)
-
VB.NET getとsetの概念がわかりません。
Visual Basic(VBA)
-
-
4
.NET SqlDataReader のレコード有無判定
Visual Basic(VBA)
-
5
RaiseEventのメリット
Visual Basic(VBA)
-
6
VS 2008(VB.NET)
Visual Basic(VBA)
-
7
VB2008で定数に色の設定をしたいです。(初心者)
Visual Basic(VBA)
-
8
String"から型'Double'への変換は無効です。 とエラーが出ます。
Visual Basic(VBA)
-
9
visual studio でインデントを自動的に揃えるショートカットキー
その他(プログラミング・Web制作)
-
10
VB.NETで DataRow()を利用して、値からコードを取得したい。
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
画像ファイル変換(Tiff→PDF)
-
エクセルVBAの自動変換機能?
-
家電製品の電力周波数を変える機械
-
VC++2005 CStringをshortに変換
-
マンセル⇔XYZ,RGB変換式或いは...
-
bmp→jpgに、jpg→bmpに
-
なぜ通信には16進数文字列が使...
-
10進数をBCDに変換する方法
-
Mac 乗数の入力方法
-
3のつく数字と3の倍数のみを表...
-
逆コンパイルと逆アセンブルの...
-
bmp → jpeg への変換
-
変換中の文字を表示させず、IME...
-
c++でmatからvectorへの変換の...
-
FortranをC++(VC++)へ変換
-
動画の画質劣化を抑える方法は?
-
変換ソフトについて
-
緯度、経度の 10進法と 60進法...
-
ハフ変換により円の検出方法はh...
-
VB.NETをJavaに変換するツール...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
家電製品の電力周波数を変える機械
-
エクセルVBAの自動変換機能?
-
マンセル⇔XYZ,RGB変換式或いは...
-
なぜ通信には16進数文字列が使...
-
分を時間に変換するプログラム
-
緯度、経度の 10進法と 60進法...
-
【EXCEL】カナ、ひらがなを英字...
-
10進数をBCDに変換する方法
-
FortranをC++(VC++)へ変換
-
VB 6 を VS 2012に変換するには?
-
シーケンサのCPUはニーモニック...
-
VB6からVB2010への変換について
-
StrConvの使い方について教えて...
-
VB.NETをJavaに変換するツール...
-
Mac 乗数の入力方法
-
VB6で10進数を32進数に変換する...
-
画像ファイル変換(Tiff→PDF)
-
isoをimgに変換したいのですが...
-
C/C++→JAVAに変換するツール
-
UTF8→ShiftJISに変換したいです!
おすすめ情報