VB.NET a-t-il un équivalent direct aux out
paramètres de fonction C # , où la variable passée dans une fonction n'a pas besoin d'être initialisée?
Réponses:
Non, il n'y a pas d'équivalent du out
mot - clé 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 au préalable.
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 le framework (par exemple Double.TryParse ), vous pouvez voir les <OutAttribute>
paramètres ajoutés à, mais cela ne fait une différence que lorsque l'appel est organisé pour l'interopérabilité COM ou l'appel de plate-forme.)
ByRef
paramètres. (Cela ne se produit pas avec les paramètres de type valeur.)
Nothing
éliminera l'avertissement même si cela ne change pas le résultat.
Nothing
jusqu'à présent. Cela prend juste du temps car je dois le faire des centaines de fois dans un grand site Web hérité. Merci d'avoir enquêté.
Out
attribut n'est pas équivalent au out
mot-clé C # .
Non, il n'y a pas de construction équivalente qui permet à une variable non initialisée d'être passée à une méthode sans avertissement, mais, comme mentionné dans ma question et réponse spécifiant un <Out()>
attribut sur une ByRef
définition de paramètre, bien que VB l'ignore, est traité par C # comme out
paramètre.
Donc, je pré-initialiserais les variables de référence Nothing
et spécifierais<Out()> ByRef
pour signifier l'intention (cela fonctionnera si les utilisateurs C # accèdent à vos méthodes).
Si vous pensez savoir quand vous avez l'intention d'accéder à la valeur Nothing
par défaut dans des variables de référence autrement non attribuées, vous pouvez définir la "Configuration d'avertissement" "Utilisation de la variable avant l'affectation" sur "Aucune" au niveau du projet (Propriétés du projet> Compiler, et vous souhaitez 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 de Vb.net
Sub TestFunc(ByVal x As Integer, ByRef y As Integer, ByRef z As Integer)
x += 1
y += 1
z = 5
End Sub
Mettre à jour
Comme indiqué dans le commentaire, n'oubliez pas d'initialiser votre paramètre qui sera utilisé dans le slot de sortie
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, tout allait 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 compiler complaining.
Dim m_arr_values() as Integer = Nothing
fnRetArray(m_arr_values)
Cela aide également 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
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 en C #, car il ne vous permet pas d'utiliser une 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.
Utilisez simplement ByRef.
VB a l'attribut qui devrait être le même que C # out mais aujourd'hui, vous recevez toujours un avertissement même si vous l'utilisez. Il y a des détails sur la façon de le réparer dans la zone vblang de github. https://github.com/dotnet/vblang/issues/67 .
Object
, donc elle ne peut pas être utilisée pour unByRef x As Integer
paramètre).