157

これらはすべて等しいですか?どのような状況で私は他のものよりもそれぞれを選ぶべきですか?

  • var.ToString()

  • CStr(var)

  • CType(var、String)

  • DirectCast(var、String)


編集:NotMyselfからの提案…

  • TryCast(var、String)
4

7 に答える 7

165

それらはすべてわずかに異なり、一般的に許容できる使用法があります。

  • var.ToString()タイプに関係なく、オブジェクトの文字列表現を提供します。varがまだ文字列でない場合は、これを使用します。
  • CStr(var)VB文字列キャスト演算子です。私はVBの男ではないので、避けることをお勧めしますが、実際には何も害はありません。基本的にはと同じだと思いますCType
  • CType(var, String)提供された変換演算子を使用して、指定されたタイプを文字列に変換します。
  • DirectCast(var, String)オブジェクトを文字列にアップキャストするために使用されます。オブジェクト変数が実際には文字列であることがわかっている場合は、これを使用してください。(string)varこれはC#の場合と同じです。
  • TryCast(@ NotMyselfで言及されているように)はに似ていますが、変数を文字列に変換できない場合は、例外をスローするのではなく、DirectCast戻ります。これはC#Nothingの場合と同じです。var as stringMSDNのTryCastページにも良い比較があります。
于 2008-09-02T22:03:59.413 に答える
13

Cstr()パフォーマンスを向上させるためにインラインでコンパイルされます。

CType変換演算子が定義されている場合、型間のキャストを許可します

ToString()基本型と文字列の間で変換できない場合、例外がスローされます。

TryParse()文字列からベースへtypeif可能それ以外の場合は false を返します

DirectCast型が継承によって関連付けられているか、共通のインターフェイスを共有している場合に使用され、キャストが不可能な場合は例外がスローさtrycastれ、このインスタンスでは何も返されません

于 2008-11-25T20:02:41.577 に答える
8

私は次の構文を好みます:

Dim number As Integer = 1
Dim str As String = String.TryCast(number)

If str IsNot Nothing Then

ええと、私は通常C#でコードを書いていると言えます。8)

私がTryCastを好む理由は、例外をキャストするオーバーヘッドを台無しにする必要がないからです。キャストが成功するか、変数がnullに初期化され、それに応じて処理されます。

于 2008-09-02T21:54:36.597 に答える
8

MSDNは、特定のタイプのCxxxキャストは、インラインコードに変換されるため、VB.NETのパフォーマンスを向上させることができることを示しているようです。何らかの理由で、特定の場合にはCTypeではなくDirectCastも提案されます(ドキュメントには、継承関係がある場合と記載されています。これは、キャストの健全性がコンパイル時にチェックされ、最適化を適用できることを意味しますが、CTypeは常にVBランタイム。)

VB .NETコードを書いているとき、何を使用するかは、何をしているかによって異なります。捨てるプロトタイプコードの場合は、たまたま入力したものをすべて使用します。それが私が真剣に考えているコードである場合、私はCxxxキャストを使用しようとします。存在しない場合、継承関係があると合理的に確信している場合は、DirectCastを使用します。キャストが成功するかどうかわからない状況(たとえば、ユーザー入力->整数)の場合は、ユーザーに例外をスローするよりもわかりやすい方法でTryCastを使用します。

私が振ることができないことの1つは、CStrの代わりにToStringを使用する傾向があることですが、おそらくCstrの方が高速です。

于 2008-09-02T22:12:07.600 に答える
4

ユーザーKonrad Rudolphは、スタック オーバーフローの質問 "VB.NET の隠し機能" で DirectCast() を支持しています。

于 2008-09-19T16:28:44.290 に答える
1

認定試験によると、CXXX 変換よりもパフォーマンスを最適化するため、単純な変換にはできる限り Convert.ToXXX() を使用する必要があります。

于 2011-03-16T18:44:19.130 に答える
0

かつて、MSDN ライブラリの状態が CStr() を使用するように表示されていたのを覚えています。これが本当かどうかはわかりません。

于 2008-09-05T19:03:09.197 に答える