Czy VB.NET ma bezpośredni odpowiednik out
parametrów funkcji C # , gdzie zmienna przekazana do funkcji nie wymaga inicjalizacji?
vb.net
c#-to-vb.net
out-parameters
cspolton
źródło
źródło
Object
, więc nie można jej użyć jakoByRef x As Integer
parametru).ByRef
parametrów. (Nie dzieje się tak z parametrami typu wartości.)Nothing
do nich pozbędzie się ostrzeżenia, chociaż nie zmienia to wyniku.Nothing
do tej pory przypisywałem im zadania . Jest to po prostu czasochłonne, ponieważ muszę to robić setki razy w dużej, starszej witrynie internetowej. Dziękuję za zbadanie.Out
atrybut nie jest równoważny zeout
słowem kluczowym C # .Nie, nie ma równoważnej konstrukcji, która umożliwia przekazanie niezainicjowanej zmiennej do metody bez ostrzeżenia, ale, jak wspomniano w moim pytaniu i odpowiedzi, określając
<Out()>
atrybut wByRef
definicji parametru, chociaż VB go ignoruje, jest traktowany przez C # jakoout
parametr.Tak więc wstępnie zainicjowałbym zmienne referencyjne
Nothing
i określiłem je,<Out()> ByRef
aby zaznaczyć zamiar (to zadziała, jeśli użytkownicy C # kiedykolwiek uzyskają dostęp do twoich metod).Jeśli czujesz, że wiesz, kiedy zamierzasz uzyskać dostęp do wartości domyślnych
Nothing
w innych nieprzypisanych zmiennych referencyjnych, możesz ustawić opcję „Konfiguracja ostrzeżenia” „Użycie zmiennej przed przypisaniem” na „Brak” na poziomie projektu (Właściwości projektu> Kompiluj i prawdopodobnie chcesz ustawić konfigurację na „Wszystkie konfiguracje” przed zmianą tego ustawienia) lub w VS2015 (VB.NET 14) możesz użyć#Disable Warning BC42030
.źródło
Wersja C #
void TestFunc(int x, ref int y, out int z) { x++; y++; z = 5; }
Wersja Vb.net
Sub TestFunc(ByVal x As Integer, ByRef y As Integer, ByRef z As Integer) x += 1 y += 1 z = 5 End Sub
Znalazłem odpowiedź tutaj
Aktualizacja
Jak stwierdzono w komentarzu, nie zapomnij zainicjować parametru, który będzie używany w gnieździe wyjściowym
źródło
Miałem problem w VB.NET, że nazwałem funkcję „by ref”, która przekazała tablicę z powrotem.
Mimo że kompilator oznaczył to jako ostrzeżenie, było w porządku. Poprawka jest super prosta i prawdopodobnie dobra praktyka programistyczna.
Zmieniłam
Dim m_arr_values() as Integer fnRetArray(m_arr_values)
do
' Even though 'Nothing' is the default value, setting it ' stops the compiler complaining. Dim m_arr_values() as Integer = Nothing fnRetArray(m_arr_values)
Jest to również pomocne podczas kodowania, jeśli nazwy zmiennych są opisowe ...
Sub fnCreatePalette(ByRef arr_in_pal() As color, ByRef arr_out_pal() as uinteger) ... End Sub
źródło
Możesz użyć metody przekazywania przez odwołanie w VB.NET.
Potrzebujesz mechanizmu parametrów Out w C #, ponieważ nie pozwala on na użycie żadnej zmiennej bez jej zainicjowania.
VB.NET nie potrzebuje specjalnego słowa kluczowego, ponieważ robi to automatycznie.
Po prostu użyj ByRef.
źródło
VB ma atrybut, który powinien być taki sam jak C # out, ale dziś nadal otrzymujesz ostrzeżenie, nawet jeśli go używasz. Szczegółowe informacje na temat jego naprawiania znajdują się w obszarze vblang na githubie. https://github.com/dotnet/vblang/issues/67 .
źródło
Użyj słowa kluczowego ByRef przed zmienną.
źródło
ByRef
jest odpowiednikiemref
parametrów w C #, które muszą zostać zainicjowane przed przekazaniem do funkcji.