VB では、間接の数に応じて、DirectCast
値の型 ( double
、 、 ...) にキャストしたり、キャストしたりすると、動作が異なります。int
DirectCast(nothing, Double)
return 0
しかし、行列の要素がゼロに等しいようなものをキャストしようとすると、例外があります
Dim pArray as Object() = { nothing, 1.5, 2.27, -3.0}
DirectCast(pArray(1), Double) 'work with no issue
DirectCast(pArray(0), Double) 'Exception : Cannot convert to double
同じやり方で :
Dim TestCasting as object = nothing
Directcast(TestCasting, double) 'Exception : Cannot convert to double
をと同じようDirectCast
に動作させるにはどうすればよいですか?pArray(0)
DirectCast(nothing, double)
私の投稿は、コードの残りの部分を気にせずに問題を強調する例でした。
スリル満点。これは、問題を引き起こす可能性のある例です。ランダムなテーブルを取りましょう (主キーなどはありませんが、気にしないでください) :
TABLE [dbo].[IDENTIFICATION] (
[USER_ID] INT IDENTITY (1, 1) NOT NULL,
[PASSWORD] NVARCHAR(50) NULL,
[EXPIRATION_D] DATETIME NOT NULL,
[LAYOUT] INT NULL,
);
今、私は Object(,) を返すメソッドを持っています
Dim pArray as Object(,) = myconnection.GetSqlRequest("Select USER_ID, PASSWORD, EXPIRATION_D, LAYOUT from IDENTIFICATION where USER_ID = 3")
{ 3, "StackOverflow", New Date(2110,01,01), nothing}
レイアウトはオプションのフィールドであるため、これは次のようなものを返す場合があります。
私はそのようにすることができます:
if pArray(0,3) is nothing then
Layout = 0
Else
Layout = DirectCast(pArray(0,3), Double)
End if
しかし、私の目標はただ行うことです:
Layout = DirectCast(pArray(0,3))
主に、私が書いていないコードの大部分をリファクタリングしているためであり、またDirectCast(nothing, Double) return 0
、この場合を除いてそれが私を悩ませているためです。