2010-06-10 6 views
3

Dans C# Je peux le faire:VB.Net appelant Nouveau sans attribuer une valeur

new SomeObjectType("abc", 10); 

En d'autres termes, je peux appeler nouveau sans attribuer l'instance créée à une variable. Cependant, dans VB.Net, il semble que je ne peux pas faire la même chose.

New SomeObjectType("abc", 10) ' syntax error 

Est-il possible de le faire dans VB.Net?

Répondre

1

Voir les réponses à cet autre SO Answer

Donc cela devrait fonctionner:

With New SomeObjectType("abc", 10) 
End With 
+0

Je ne pense pas que l'appel ne fonctionnera pas puisque je n'appelle aucune méthode, seulement le constructeur. Avec ne me sauve pas vraiment beaucoup, je peux aussi bien l'assigner à une variable. Quoi qu'il en soit, je suppose que ce n'est pas possible avec VB.Net, merci pour le lien cependant. – dcp

+0

Désolé c'était l'une des autres réponses que je regardais en particulier, je vais mettre à jour mon lien, la réponse a déjà été mise à jour pour refléter l'utilisation de With .. Fin Avec –

0

Cela devrait être la syntaxe correcte, par ex.

Dim name As New String 
Dim url As New Uri("http://www.somedomain.com") 

Avez-vous encore du code là où cela se passe?

+0

Je pense que vous avez mal compris ma question. Je veux être en mesure d'appeler New sans affecter sa valeur à une variable (par exemple dans votre code ci-dessus, je veux être en mesure de faire New Uri ("http://www.somedomain.com") sans le "Dim URL En tant que "partie précédente" – dcp

+0

Ouais, mais pour faire quoi? Faire New Uri ("http://www.somedomain.com") sans affectation ou accès membre est plutôt inutile ... –

+0

Je ne suis pas d'accord. Par exemple, si le constructeur ne peut pas prendre un argument nul pour son premier argument, alors nous pouvons écrire un test d'échec en faisant "new SomeObject (null)". Il n'est pas nécessaire de créer une variable ici parce que nous testons juste que l'exception attendue est levée.Avez-vous jamais utilisé NUnit ou d'autres frameworks de test avant? – dcp

1

Les travaux suivants sur le compilateur Mono VB (vbnc, version 0.0.0.5914, Mono 2.4.2 - r) :

Call New SomeObjectType("abc", 10) 

Notez le Call requis.

+0

Cela ne fonctionne pas, il ne compilera pas . – dcp

+0

@dcp: Je l'ai compilé avant de poster. (Bien que pour être honnête, je suis sur OS X ici, donc j'ai utilisé le compilateur Mono.) –

+0

Hmmm, intéressant. Pouvez-vous essayer de compiler ceci (citations externes ajoutées pour plus de clarté): "Call New Exception (" abc ")" Je suis sur XP avec VS 2008, et cela ne compilera pas. Peut-être que c'est une "caractéristique" de Mono :). – dcp

0

On peut définir un sous pour rejeter l'objet construit:

Sub gobble(dummy As Object) 
End Sub 

appellent alors le constructeur comme suit:

gobble(New SomeClass()) 

J'utilise cette approche dans les tests lorsque je teste des exceptions dans les constructeurs . Je construis l'objet dans un lambda et passe ce lambda à une fonction qui vérifie l'Exception. Convient joliment sur une ligne.

assertThrows(Of ArgumentOutOfRangeException)(Sub() gobble(New ClassUnderTest("stuff")))