1. ホーム
  2. vb.net

[解決済み] VB.NETにおけるDirectCast()とCType()の違いについて

2022-02-16 22:18:28

質問事項

私は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 演算子を使用します。