NULLABLE, DIFFÉRENCE ENTRE C# ET VB.NET

hugstoo Messages postés 6 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 19 février 2009 - 19 févr. 2009 à 11:27
cs_Bidou Messages postés 5486 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 - 20 févr. 2009 à 08:09
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/49303-nullable-difference-entre-c-et-vb-net

cs_Bidou Messages postés 5486 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
20 févr. 2009 à 08:09
Oui je suis d'accord.
Tu fais un mini tuto la-dessus? En gros, un résumé du tout, ça pourrait être pas mal :)
SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
20 févr. 2009 à 06:59
Merci pour le lien Bidou,

Par contre, l'auteur prétends que le compilateur fait une erreur, alors que comme chez moi, un des commentaires dit le contraire (et j'ai les options activées).$
Le dernier commentaire tente une explication basée sur les structures, mais pas convaincante pour moi. Le fait d'écrire
Public i as Integer
et que i prenne la valeur par défaut, soit 0, ne me pose pas de problème.
Par contre,
Public i as Integer = Nothing
est à mon avis une aberration syntaxique.

J'ai trouvé un autre post :
http://blog.somecreativity.com/2008/04/16/on-assigning-null-to-value-types-in-vbnet/
où l'auteur présente ceci sous un autre angle, mais en conclue également que "la sémantique VB.Net est à cet égard un peu cassée".
A mon avis, il faudrait au minimum avoir une option du compilateur qui permette de générer une erreur avec ce genre de code, même si certains préféreront peut-être conserver cette syntaxe.
cs_Bidou Messages postés 5486 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
19 févr. 2009 à 15:45
cs_Bidou Messages postés 5486 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
19 févr. 2009 à 15:39
C'est vrai que c'est étrange :D Je ne connais pas assez VB pour répondre...
Par contre, pour une source ça fait vraiment maigre!

Je te propose de le mettre comme tutorial avec une explication et des exemples une fois que la solution a été trouvé. Ca me paraît plus intéressant...
SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
19 févr. 2009 à 13:26
Que c'est la même classe du framework.

Pour ton 2ème et ton 3ème message, je sais que
Dim i as Nullable(Of Integer) = Nothing
Fonctionne et compile.

Ce que je n'accepte pas c'est que
Dim i as Integer = Nothing
compile aussi. Pour moi, le compilateur devrait donner une erreur si on essaye d'assigner Nothing à une variable "value type".
hugstoo Messages postés 6 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 19 février 2009
19 févr. 2009 à 13:08
int en C# est équivalent à Integer en VB?
équivalent c'est à dire?
hugstoo Messages postés 6 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 19 février 2009
19 févr. 2009 à 13:07
Qu'est ce que tu entends par équivalent?
SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
19 févr. 2009 à 12:01
Faux,

Integer est l'équivalent c# de int, et c'est un type primitif : http://msdn.microsoft.com/en-us/library/aa711900.aspx

De plus si c'était réellement un objet, sa valeur serait nulle, et pas 0.
hugstoo Messages postés 6 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 19 février 2009
19 févr. 2009 à 11:45
essaye avec:
Dim i as Nullable(Of Integer) = Nothing
hugstoo Messages postés 6 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 19 février 2009
19 févr. 2009 à 11:43
la valeur par défaut d'un Integer est 0...
hugstoo Messages postés 6 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 19 février 2009
19 févr. 2009 à 11:27
bonjour,

c'est très simple:
la variable i dans ton code VB est de type Integer.
=>Il s'agit d'un type objet.
la variable i dans ton code C# est de type int.
=>Il s'agit d'un type primitif.
Il ne s'agit pas d'un BUG, mais d'un concept objet
Rejoignez-nous