初めまして。
現在、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も見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
緯度、経度の 10進法と 60進法...
-
画像ファイル変換(Tiff→PDF)
-
GetDlgItemInt( ) c++
-
StrConvの使い方について教えて...
-
Windows ce と utf-8
-
【EXCEL】カナ、ひらがなを英字...
-
エクセルVBAの自動変換機能?
-
MATLAB/simulinkでのD/A変換の仕方
-
Mac 乗数の入力方法
-
php
-
ImageMagickでPSDを変換するには。
-
ASP.NETでPDF作成のための使用...
-
tex 郵便記号のだしかた
-
C#で漢字→ローマ字を変換
-
iconv_openで「II」(ギリシャ...
-
VC++2005 CStringをshortに変換
-
c++でmatからvectorへの変換の...
-
SJIS⇔UTF-8の文字コード...
-
UTF8→ShiftJISに変換したいです!
-
vb.netの型変換について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
緯度、経度の 10進法と 60進法...
-
Mac 乗数の入力方法
-
3のつく数字と3の倍数のみを表...
-
10進数をBCDに変換する方法
-
bmp→jpgに、jpg→bmpに
-
エクセルVBAの自動変換機能?
-
アセンブラ言語の数字を数値に...
-
なぜ通信には16進数文字列が使...
-
SJIS⇔UTF-8の文字コード...
-
C++からCへのソース変換について
-
分を時間に変換するプログラム
-
UTF8→ShiftJISに変換したいです!
-
家電製品の電力周波数を変える機械
-
マンセル⇔XYZ,RGB変換式或いは...
-
VB.NETをJavaに変換するツール...
-
画像ファイル変換(Tiff→PDF)
-
PHPで、日本語からアルファベッ...
-
魚眼レンズの画像処理
-
C#で漢字→ローマ字を変換
-
StrConvの使い方について教えて...
おすすめ情報