Existe-t-il un équivalent VB.NET des parameters C # out?

VB.NET a-t-il un équivalent direct out parameters de la fonction C # out , où la variable transmise à une fonction n’a pas besoin d’être initialisée?

Non, il n’y a pas d’équivalent du mot clé out dans VB.

Cependant, VB initialise automatiquement toutes les variables locales dans une méthode, vous pouvez donc utiliser ByRef sans avoir à initialiser explicitement la variable en premier.

Exemple:

 Sub Main() Dim y As Integer Test(y) End Sub Sub Test(ByRef x As Integer) x = 42 End Sub 

(Si vous examinez le code dans la structure (par exemple Double.TryParse ), vous pouvez voir le ajouté aux parameters, mais cela ne fait une différence que lorsque l’appel est ordonné pour COM Interop ou Invoke Platform.)

Non, il n’y a pas de construction équivalente permettant à une variable non initialisée d’être transmise à une méthode sans avertissement, mais, comme indiqué dans ma question et réponse, spécifiant un atsortingbut sur une définition de paramètre ByRef , même si VB ignore il est traité par C # comme un paramètre out .

Donc, je pré-initialiser les variables de référence à Nothing et spécifier ByRef pour indiquer l’intention (qui fonctionnera si les utilisateurs C # accèdent à vos méthodes).

Si vous pensez savoir quand vous voulez accéder à la valeur par défaut Nothing dans les variables de référence non assignées, vous pouvez définir la “Configuration d’avertissement” “Utilisation de la variable avant l’affectation” à “Aucune” au niveau du projet (Propriétés du projet> Comstackr et voulez probablement définir Configuration sur “Toutes les configurations” avant de modifier ce paramètre), ou, dans VS2015 (VB.NET 14), vous pouvez utiliser #Disable Warning BC42030 .

Version C #

  void TestFunc(int x, ref int y, out int z) { x++; y++; z = 5; } 

Version Vb.net

  Sub TestFunc(ByVal x As Integer, ByRef y As Integer, ByRef z As Integer) x += 1 y += 1 z = 5 End Sub 

Trouvé la réponse ici

Mettre à jour

Comme indiqué dans le commentaire, n’oubliez pas d’initialiser votre paramètre qui sera utilisé dans l’emplacement de sortie

Vous pouvez utiliser la méthode de passage par référence dans VB.NET.

Vous avez besoin du mécanisme de paramètre Out dans C #, car il ne vous permet d’utiliser aucune variable sans l’initialiser.

VB.NET n’a pas besoin d’un mot-clé spécial car il le fait automatiquement par lui-même.

Il suffit d’utiliser ByRef.

J’ai eu le problème dans VB.NET que j’ai appelé une fonction “par ref” qui a renvoyé un tableau.

Même si le compilateur l’a signalé comme un avertissement, c’était bien. Le correctif est super simple et probablement une bonne pratique de programmation.

j’ai changé

 Dim m_arr_values() as Integer fnRetArray(m_arr_values) 

à

 ' Even though 'Nothing' is the default value, setting it ' stops the comstackr complaining. Dim m_arr_values() as Integer = Nothing fnRetArray(m_arr_values) 

Cela aide aussi lors du codage si les noms de variables sont descriptifs …

 Sub fnCreatePalette(ByRef arr_in_pal() As color, ByRef arr_out_pal() as uinteger) ... End Sub 

VB a l’atsortingbut qui devrait être identique à celui de C # out, mais aujourd’hui, vous recevez toujours un avertissement même si vous l’utilisez. Il y a des détails sur sa fixation dans la zone de vblang de github. https://github.com/dotnet/vblang/issues/67 .

Utilisez le mot-clé ByRef avant la variable.