これらはすべて同じですか?どのような状況で、他のどれよりもそれぞれを選択すべきですか
var.ToString()
CStr(var)
CType(var、String)
DirectCast(var、String)
- TryCast(var、String)
これらはすべて同じですか?どのような状況で、他のどれよりもそれぞれを選択すべきですか
var.ToString()
CStr(var)
CType(var、String)
DirectCast(var、String)
回答:
それらはすべてわずかに異なり、一般的に許容できる使用法があります。
var.
ToString
()
オブジェクトのタイプに関係なく、オブジェクトの文字列表現を提供します。var
が文字列でない場合に使用します。CStr
(var)
VB文字列キャスト演算子です。私はVBの人ではないので、避けることをお勧めしますが、実際には何も害はありません。基本的にはと同じだと思いますCType
。CType
(var, String)
提供された変換演算子を使用して、指定された型を文字列に変換します。DirectCast
(var, String)
オブジェクトを文字列にアップキャストするために使用されます。オブジェクト変数が実際には文字列であることがわかっている場合は、これを使用します。これは(string)var
C#と同じです。TryCast
(@NotMyselfで述べたようDirectCast
に)はに似Nothing
ていますが、変数を例外にスローするのではなく、文字列に変換できない場合に返されます。これはvar as string
C#と同じです。TryCast
MSDN のページにも良い比較があります。TryCast
はNothing
、値として使用できる型である必要があるため、値型に対してのみ機能します
CStr(var)
varがDBNull.Valueの場合、チョークして例外を発生させますが、代替Convert.ToString(var)
は空の文字列を返します。
Dim myList AS ArrayList=new ArrayList
あなたが書くとき(From e In myList select CType(e.Name,String)).ToArray()
それは動作しません。書くように... select CType(e.Name.ToString,String)).ToArray()
なり、笑顔を取り戻しました。
MSDNは、特定の型のCxxxキャストはインラインコードに変換されるため、VB .NETのパフォーマンスを向上できることを示しているようです。何らかの理由で、特定のケースではCTypeではなくDirectCastも提案されます(ドキュメントには、継承関係がある場合と記載されています。これは、キャストの健全性がコンパイル時にチェックされ、最適化を適用できることを意味しますが、CTypeは常にVBランタイム。)
VB .NETコードを記述しているとき、何を使用するかは、何をしているのかによって異なります。もしそれが私が捨てようとしているプロトタイプのコードであるなら、私はタイプすることを起こしたものなら何でも使用します。それが私が真剣に考えているコードであるなら、私はCxxxキャストを使用しようとします。存在しない場合、継承関係があると合理的に確信できる場合は、DirectCastを使用します。キャストが成功するかどうかわからない状況(たとえば、ユーザー入力->整数)の場合は、TryCastを使用して、ユーザーに例外を投げるよりもフレンドリーなことを行います。
振ることができないことの1つは、CStrではなくToStringを使用する傾向があることですが、おそらくCstrの方が高速です。
私は次の構文を好みます:
Dim number As Integer = 1
Dim str As String = String.TryCast(number)
If str IsNot Nothing Then
私は通常、C#でコードを書くと言ってよいでしょう。8)
私がTryCastを好む理由は、例外をキャストするオーバーヘッドを混乱させる必要がないためです。キャストが成功するか、変数がnullに初期化され、それに応じて処理されます。
.ToString()
。Integerなどの値の型をNothingにすることはできません。したがって、この場合、CStr(number)またはnumber.ToString()のいずれかが安全です。一般的な場合(値の型だけでなく)、CStr(whatever)は安全です。これは、Nothingを処理できるためです。結果は文字列変数でNothingになります。TryCastは非常に便利です-ここではありません。
String
、OPがDirectCastが適切である状況について話し合っている可能性は低いです。
String
やToString
、私の苦情は適用されません。一般的なコンバージョンからトピックを絞り込むまでは、DirectCastを推奨しないでください。
認定試験によると、CXXX変換よりもパフォーマンスが最適化されるため、単純な変換では可能な限りConvert.ToXXX()を使用する必要があります。