2009-09-04 5 views
4

実際に変換する必要がない限り、VBのビルトイン変換関数(CStr、CDate、CBool​​、CIntなど)は通常使用しません。私がちょうどオブジェクトから文字列にキャストしているのであれば、私は通常、CStrなどが私が必要としない余分なものをやっているという前提のもと、DirectCastまたはTryCastを使います。しかし、次の例のようにDirectCastの構文が少し煩雑になることがあります。VB CStr、CDate、CBool​​などと変換なしのキャスト用DirectCast

Dim value1 As String 
Dim value2 As String 
Using cn As New SqlConnection(cnStr) 
    Using cmd as New SqlCommmand(sqlStr, cn) 
     Using reader = cmd.ExecuteReader() 
      While reader.Read() 
       value1 = DirectCast(reader("COLUMN1"), String) 
       value2 = CStr(reader("COLUMN1")) 
      End While 
     End Using 
    End Using 
End Using 

SqlDataReader.ItemはObjectを返します。ObjectはStringにキャストする必要があります。 CStrは読みやすく、タイプし、説明するのが簡単です(IMO)。

私の質問は、私が使っているものは何ですか?私はちょうどCStr(とCDateとCBool​​など)に行き、それらの関数がやっていると思う追加の作業について心配する必要はありませんか?

これらの機能を使用することには他に欠点はありますか?あなたの例では

答えて

10

This is a good post DirectCastとCTypeのキャストとバリエーションに関するコメントで説明しています。

要するに、あなたがそれについて明示して何を期待するかを知りたい場合は、DirectCastが推奨されます。一方、Paul Vick(VBテクニカルリード)のコメントによると、CTypeのバリエーションはそれほど重要ではなく、単に使用するだけであると言います。

そのポストから集められたいくつかの便利なリンク:私はCStr関数、CInt関数、CBool​​とctype関数を使用

+0

+1リンクをありがとう。 –

+4

Paul Vickは、DirectCastのスピードの利点はそれほど重要ではないと言います。しかしDirectCastのもう一つの利点は、安全性(プログラミングエラーの早期発見)です。無差別にCStrなどを使うことは、 'Option Strict Off'への一歩です。そしてあなたはそれを望んでいません。 – MarkJ

1

、あなただけ使用できます。

value1 = reader("COLUMN1").ToString() 

それは文字列として列の内容を返します。

私はできる限りオブジェクトにToString()を使用することを常に好みます。ときどきオブジェクトのToString()メソッドは、オブジェクトではなくオブジェクトのクラス名を返すので、.ToString()は必ずしもオプションではありません。

.NETフレームワークにはたくさんの良い選択肢が用意されているため、VB関数CStr、CIntなどは必要ありません。例えば。

Dim value As Integer = Convert.ToInt32(reader("Number").ToString()) 

文字列をintに変換する良い方法です。古いVBスタイル関数は後方互換性のためだけに存在するので、これらの変換メソッドを読む価値があります。

+0

コメントありがとうございます。例として文字列を使用しましたが、日付、bool、intなどにも該当します。文字列のToStringは良い提案です。 –

0

時間のほとんどを、それは読むのが短くて簡単だからです。少しのパフォーマンスコストがかかるかもしれませんが、ほとんどの場合、問題はありません。 CType、TryCast、DirectCastなどの違いを知ることは良いことです。

関連する問題