VB.NET でキャストするにはどうすればよいですか?
質問
これらはすべて等しいのでしょうか?どのような状況で、他のものよりもそれぞれを選択する必要がありますか?
var.ToString()
CStr(var)
CType(var, 文字列)
DirectCast(var, 文字列)
編集:からの提案 自分ではない…
- TryCast(var, 文字列)
解決
これらはすべてわずかに異なりますが、通常は許容可能な使用方法があります。
var.
ToString
()
オブジェクトの型に関係なく、オブジェクトの文字列表現が得られます。こんな場合にこれを使用してくださいvar
はすでに文字列ではありません。CStr
(var)
VB 文字列キャスト演算子です。私は VB の専門家ではないので、避けることをお勧めしますが、実際には何も害はありません。基本的には同じだと思いますCType
.CType
(var, String)
提供された変換演算子を使用して、指定された型を文字列に変換します。DirectCast
(var, String)
オブジェクトを文字列にアップキャストするために使用されます。オブジェクト変数が実際には文字列であることがわかっている場合は、これを使用します。これは以下と同じです(string)var
C#で。TryCast
(@ が言及したように)自分ではない) のようなものですDirectCast
, 、でも戻ってきますNothing
変数を文字列に変換できない場合は、例外をスローするのではなく。これは以下と同じですvar as string
C#で。のTryCast
MSDN のページにも優れた比較があります。
他のヒント
Cstr()
パフォーマンスを向上させるためにインラインでコンパイルされます。
CType
変換演算子が定義されている場合、型間のキャストが可能になります。
ToString()
基本型と文字列の間で変換できない場合は例外がスローされます。
TryParse()
文字列からベースまで typeif
それ以外の場合は false を返します
DirectCast
型が継承を介して関連付けられている場合、または共通のインターフェイスを共有している場合に使用され、キャストが不可能な場合は例外がスローされます。 trycast
この場合は何も返しません
私は次の構文を好みます。
Dim number As Integer = 1
Dim str As String = String.TryCast(number)
If str IsNot Nothing Then
ああ、私が通常 C# でコードを書いていることがわかります。8)
私が TryCast を好む理由は、キャスト例外のオーバーヘッドを気にする必要がないからです。キャストが成功するか、変数が null に初期化されるので、それに応じて対処します。
MSDN 特定の型の Cxxx キャストはインライン コードに変換されるため、VB .NET のパフォーマンスを向上させることができることを示しているようです。何らかの理由で、それはまた示唆します ダイレクトキャスト 特定の場合には CType とは対照的に (ドキュメントには、継承関係がある場合であると記載されています。これは、CType が常に VB ランタイムを使用するのに対して、コンパイル時にキャストの健全性がチェックされ、最適化が適用できることを意味すると思います。)
VB .NET コードを作成するとき、何を使用するかは、何をしているかによって異なります。捨てるつもりのプロトタイプコードであれば、たまたま入力したものをそのまま使います。真剣に考えているコードの場合は、Cxxx キャストを使用するようにしています。存在しない場合でも、継承関係があると合理的に確信できる場合は、DirectCast を使用します。キャストが成功するかどうかわからない状況 (たとえば、ユーザー入力 -> 整数) の場合は、TryCast を使用して、ユーザーに例外を投げるよりもフレンドリーな処理を行います。
私が譲れないことの 1 つは、私は CStr の代わりに ToString を使用する傾向があることですが、おそらく Cstr の方が高速であるということです。
認定試験によれば、CXXX 変換よりもパフォーマンスが最適化されるため、単純な変換には可能な限り Convert.ToXXX() を使用する必要があります。
かつて、MSDN ライブラリでは CStr() の方が高速であるという理由で CStr() を使用するよう指示されていたのを覚えています。これが本当かどうかは分かりませんが。