2010-12-07 5 views
4

VB.NET compile:Dim intResult As Integer = Nothing

Dim intResult As Integer = Nothing 

C# ne pas:

int intResult = null; // cannot convert 

Comment le résultat va enfin MSIL?

Plus que que, le code VB est OK:

If intResult > Nothing Then 

EDIT

OK, MS says:

Affectation Rien à une variable qu'il fixe à la valeur par défaut pour sa déclaration type.

Mais il ne dit rien sur Nothingcomparation.

Répondre

8

Nothing dans VB.NET est réellement équivalent à default(Type) en C#. Par conséquent, int intResult = default(int); est l'équivalent C#.

Selon le VB.NET Language Reference: "Affecter Nothing à une variable le définit à la valeur par défaut pour son type déclaré.Si ce type contient des membres variables, ils sont tous définis sur leurs valeurs par défaut."


Edit: concernant la comparaison à Nothing: Je devine que intResult > Nothing est interprété comme intResult > 0, parce que le type de intResult est Integer, qui a une valeur par défaut de la compilation 0. Si le type de intResult n'est pas connu au moment de la compilation (par exemple, il est un Integer en boîte), je soupçonne que cela ne compilerait pas.

Voir le Community Content section en bas de la page VB.NET Language Reference pour un exemple similaire (Nothing < 2).

+0

De même, le type int en C# ne peut pas être nul. –

+0

@Chuck: ni dans VB. – serhio

+0

+1 - voir cet article http://stackoverflow.com/questions/1976112/is-nothing-equal-to-default – StuartLC

0

Les entiers ne sont nullables en C# simple comme cela. Si vous voulez vous pouvez utiliser System.Nullable<int> court pour whinch est

int? result = null.

+0

Je sais, merci, la question ne concerne pas les types nullable, mais comment VB.NET permet à un type non nullable être nullable, et comparer Nothing à int ... – serhio

Questions connexes