5

決定的な答えは見つかりません。C# 2.0 以降、宣言できるようになりました

int? i = 125;

の省略形として

Nullable<int> i = Nullable<int>(123);

VB.NET ではこのショートカットが許可されていないことをどこかで読んだことを思い出します。しかし、見よ、今日VS 2008で試してみたところ、うまくいきました。

.NET 2.0以降このようになっているのか、それとも後で追加されたのか、誰か知っていますか?

4

4 に答える 4

13

System.Nullable は .Net 2.0 で導入され、ジェネリック型としてVB で使用できます。nullable 構文を使用することはできません。したがって、VS 2005 では次のことができます。

Dim x as Nullable(of Integer)

VB 2005 で null 等価性とボクシングが nullable に対して機能するかどうかはわかりませんが、.Net チームが 2.0 CLR に変更を加えて nullable を使用したボクシングを実現したため、答えはイエスであると思われます。VBがこれを活用していると思います。

2008年には、明らかに次のことができます:

Dim x as Integer?
于 2008-10-22T00:51:32.710 に答える
3

VB 2005 (dotnet 2.0) で動作しますが、見苦しいです。

通常の変数のように使用することはできません。オブジェクト型のように機能する可能性があると思いましたが、そうではありません。

これではなく:

dim oInt as object

dim i as integer

if oInt is nothing then 

    msgbox("int is null")
else

    i = cint(oInt)

end if

あなたはこれを持っています。

Dim oInt as nullable(of integer)

dim i as integer

if oInt.HasValue = false then 

    msgbox("int is null")

else

   i = oInt.Value

end if

ここでの問題は、変数が null のときに Value プロパティを呼び出すと、処理されない例外が発生することです。

たとえば、私のお気に入りはこれです。

AddParamToSQLCmd(sqlCmd, "@SomeID", SqlDbType.Int, 0, ParameterDirection.Input, iif(oInt.HasValue, oInt.Value, DBNull.value))

Supposed Nullable 値が null の場合、実行時エラーが発生します!!!

したがって、ここにnullable(整数の)とオブジェクトコードがあります

nullable(整数の)

if oInt.HasValue then 
    AddParamToSQLCmd(sqlCmd, "@SomeID", SqlDbType.Int, 0, ParameterDirection.Input, oInt.Value)
else
    AddParamToSQLCmd(sqlCmd, "@SomeID", SqlDbType.Int, 0, ParameterDirection.Input, dbnull.value)
end if

物体

AddParamToSQLCmd(sqlCmd, "@SomeID", SqlDbType.Int, 0, ParameterDirection.Input, oInt)
于 2008-11-19T16:12:14.070 に答える
1

IIRC、null許容型は、非常に遅い段階で.NET2.0に導入されました。C#コンパイラチームは、VB.NETチームよりも多くの言語サポートを詰め込むことができました。VB.NETチームは多かれ少なかれVS2008に追いついた。そのため、たとえば、==演算子を使用してC#2.0ではnullableを比較できますが、VB.NETではNullable.Equals()メソッドに我慢する必要がありました。Grrr。

于 2009-06-08T12:09:05.393 に答える
0

歴史はわかりませんが、VS 2008 の機能強化でした。

于 2008-10-21T22:54:00.997 に答える