Antworten:
Nein, es gibt kein Äquivalent zum out
Schlüsselwort in VB.
VB initialisiert jedoch automatisch alle lokalen Variablen in einer Methode, sodass Sie sie verwenden können, ByRef
ohne die Variable zuerst explizit initialisieren zu müssen.
Beispiel:
Sub Main()
Dim y As Integer
Test(y)
End Sub
Sub Test(ByRef x As Integer)
x = 42
End Sub
(Wenn Sie Code im Framework untersuchen (z. B. Double.TryParse ), werden möglicherweise die <OutAttribute>
hinzugefügten Parameter angezeigt. Dies macht jedoch nur dann einen Unterschied, wenn der Aufruf für COM-Interop oder Plattformaufruf bereitgestellt wird.)
ByRef
Parameter übergeben werden. (Es passiert nicht mit Werttyp-Parametern.)
Nothing
wenn Sie ihnen zuweisen , wird die Warnung entfernt, obwohl das Ergebnis dadurch nicht geändert wird.
Nothing
sie bisher zugewiesen . Es ist nur zeitaufwändig, da ich es hunderte Male auf einer großen Legacy-Website tun muss. Vielen Dank für die Untersuchung.
Out
Attribut nicht dem C # -Schlüsselwort entspricht out
.
Nein, es gibt kein Äquivalent Konstrukt , das ein nicht-initialisierte Variable ermöglicht , ohne eine Warnung an eine Methode übergeben werden, aber, wie es in meiner erwähnten Frage und Antwort ein Angabe <Out()>
Attribut auf einer ByRef
Parameterdefinition, obwohl VB ignoriert, wird behandelt von C # als out
Parameter.
Daher würde ich Referenzvariablen vorinitialisieren Nothing
und angeben <Out()> ByRef
, um die Absicht zu kennzeichnen (dies funktioniert, wenn C # -Benutzer jemals auf Ihre Methoden zugreifen).
Wenn Sie das Gefühl haben, zu wissen, wann Sie Nothing
in ansonsten nicht zugewiesenen Referenzvariablen auf die Standardeinstellungen zugreifen möchten , können Sie auf Projektebene (Projekteigenschaften> Kompilieren) die Option "Warnkonfiguration" "Verwendung von Variablen vor der Zuweisung" auf "Keine" setzen Sie möchten die Konfiguration auf "Alle Konfigurationen" setzen, bevor Sie diese Einstellung ändern. Sie können sie auch in VS2015 (VB.NET 14) verwenden #Disable Warning BC42030
.
C # -Version
void TestFunc(int x, ref int y, out int z) {
x++;
y++;
z = 5;
}
Vb.net Version
Sub TestFunc(ByVal x As Integer, ByRef y As Integer, ByRef z As Integer)
x += 1
y += 1
z = 5
End Sub
Aktualisieren
Wie im Kommentar angegeben, vergessen Sie nicht, Ihren Parameter zu initialisieren, der im Out-Slot verwendet wird
Ich hatte das Problem in VB.NET, dass ich eine Funktion "by ref" aufgerufen habe, die ein Array zurückgegeben hat.
Obwohl der Compiler es als Warnung markiert hat, war es in Ordnung. Das Update ist super einfach und wahrscheinlich eine gute Programmierpraxis.
ich habe mich verändert
Dim m_arr_values() as Integer
fnRetArray(m_arr_values)
zu
' Even though 'Nothing' is the default value, setting it
' stops the compiler complaining.
Dim m_arr_values() as Integer = Nothing
fnRetArray(m_arr_values)
Es hilft auch beim Codieren, wenn Variablennamen beschreibend sind ...
Sub fnCreatePalette(ByRef arr_in_pal() As color, ByRef arr_out_pal() as uinteger)
...
End Sub
Sie können die Referenzübergabemethode in VB.NET verwenden.
Sie benötigen den Out-Parametermechanismus in C #, da Sie damit keine Variable verwenden können, ohne sie zu initialisieren.
VB.NET benötigt kein spezielles Schlüsselwort, da es dies automatisch selbst tut.
Verwenden Sie einfach ByRef.
VB hat das Attribut, das mit C # out identisch sein sollte, aber heute erhalten Sie immer noch eine Warnung, selbst wenn Sie es verwenden. Es gibt Details zum Reparieren im vblang-Bereich von Github. https://github.com/dotnet/vblang/issues/67 .
Object
, daher kann sie nicht für einenByRef x As Integer
Parameter verwendet werden).