[解決済み] VB.NETにおけるDirectCast()とCType()の違いについて
質問事項
私はC/C++/C#の経験豊富なプログラマーで、VB.NETに入ったばかりです。私は一般的にCType(およびCInt、CBool、CStr)をキャストに使用します。これは、文字数が少なく、私が最初に触れたキャストの方法だったからです。
単純に、DirectCastとCTypeの違い(キャストの効果、パフォーマンスなど)はあるのでしょうか?TryCastの考え方は理解しています。
どのように解決するのですか?
まず注意しなければならないのは、VB.NETにはC#の
(type)instance
キャスティングの仕組みです。このことを取り上げたのは、2つのVB.NET演算子を比較する際の出発点および共通参照として有用だからです(関数のセマンティクスを持っていても、それらは演算子であって関数ではありません)。
DirectCast()
は、C#のキャスト演算子よりも厳密です。この演算子は、キャストされるアイテムが
はすでに
という型にキャストします。それでも値型はアンボックスされると思いますが、そうでない場合は変換を行いません。ですから、たとえば
short
から
int
のように、C#の
(int)
をキャストします。しかし
IEnumerable
を配列に変換する場合、基礎となる
IEnumerable
オブジェクト変数が本当に
Array
. そしてもちろん
Object
に変換することができます。オブジェクトのインスタンスの型が、継承ツリーでキャストした型より下のどこかにあることが前提です。
これは望ましいことで、より より速く . 変換や型チェックが少なくて済むからです。
CType()
は、C#のキャスト演算子よりも厳密性に欠ける。この演算子は、単純な
(int)
-スタイルのキャスト、例えば文字列を整数に変換することができます。これは
Convert.To___()
は、C#では
___
はキャストの対象型です。
これは非常に強力なので望ましいことです。しかし、このパワーはパフォーマンスを犠牲にしています。
DirectCast()
やC#のキャスト演算子では、キャストを完了させるためにかなり多くの作業が必要になることがあるからです。一般的には
DirectCast()
できる限り
最後に、キャスティングの演算子を1つ見逃していますね。
TryCast()
これは、C#の
as
演算子を使用します。
関連
-
[解決済み] VB.NETのAndとAndAlsoの違いは何ですか?
-
[解決済み] 文字列をダブルに変換する - VB
-
[解決済み] VB.NETにおけるDirectCast()とCType()の違いについて
-
[解決済み] VB.NET: FormClosing()を中止する
-
[解決済み] 特定のDataTableの行をループする
-
[解決済み] 複数のURLを同時にダウンロードするには?
-
[解決済み] オブジェクト参照がオブジェクトのインスタンスに設定されていない [重複] 。
-
[解決済み] vbLf、vbCrLf、vbCrの定数の違いについて
-
[解決済み] 2つの日付の間の月数の差
-
[解決済み】VB.NETのAndとAndAlsoの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Microsoft Access Database FileのC:㊧Employees.accdbが認識されないのですが?
-
[解決済み] VB.NETで<DllImport>を使用するには?
-
[解決済み] vb.netで2つのタイムスパン間の時差を取得する
-
[解決済み] YesNoCancel付きMessageBox - NoとCancelが同じイベントをトリガーする
-
[解決済み] オブジェクト参照がオブジェクトのインスタンスに設定されていない [重複] 。
-
[解決済み] Chr(3)は定数式なのに、Chr(172)は定数式でないのはなぜですか?
-
[解決済み] VB.NETで条件付き三項演算子はありますか?
-
[解決済み] C#の'?'演算子に相当するVB.NETはありますか?
-
[解決済み] Linq to Sql: 複数の左外部結合
-
[解決済み] VB.NET IntelliSense : ENTERオートコンプリートで改行を無効にする