Есть ли в VB.NET прямой эквивалент out
параметров функции C # , где переменная, передаваемая в функцию, не требует инициализации?
vb.net
c#-to-vb.net
out-parameters
cspolton
источник
источник
Object
, поэтому ее нельзя использовать в качествеByRef x As Integer
параметра).ByRef
параметров. (Этого не происходит с параметрами типа значения.)Nothing
им избавит от предупреждения, хотя и не изменит результат.Nothing
их назначал . Это просто отнимает много времени, так как мне приходится делать это сотни раз на большом устаревшем веб-сайте. Спасибо за расследование.Out
атрибут не эквивалентенout
ключевому слову C # .Нет, не существует эквивалентная конструкция , которая позволяет не инициализирован переменной быть передан методу без предупреждения, но, как уже упоминалось в моем вопросе и ответе указав
<Out()>
атрибут наByRef
определение параметров, хотя VB игнорирует его, это лечится C # в качествеout
параметра.Итак, я бы предварительно инициализировал ссылочные переменные
Nothing
и указал их<Out()> ByRef
для обозначения намерения (это будет работать, если пользователи C # когда-либо будут обращаться к вашим методам).Если вы чувствуете, что знаете, когда вы намереваетесь получить доступ к значениям по умолчанию
Nothing
в неназначенных ссылочных переменных, вы можете установить для параметра «Конфигурация предупреждения» «Использование переменной до назначения» значение «Нет» на уровне проекта (Свойства проекта> Компилировать, и вы, вероятно вы хотите установить для конфигурации значение «Все конфигурации» перед изменением этого параметра) или, в VS2015 (VB.NET 14), вы можете использовать#Disable Warning BC42030
.источник
Версия C #
void TestFunc(int x, ref int y, out int z) { x++; y++; z = 5; }
Версия Vb.net
Sub TestFunc(ByVal x As Integer, ByRef y As Integer, ByRef z As Integer) x += 1 y += 1 z = 5 End Sub
Нашел ответ здесь
Обновить
Как указано в комментарии, не забудьте инициализировать свой параметр, который будет использоваться в выходном слоте.
источник
У меня была проблема в VB.NET: я вызвал функцию «по ссылке», которая вернула массив.
Несмотря на то, что компилятор пометил это как предупреждение, все в порядке. Исправление очень простое и, вероятно, хорошая практика программирования.
Я изменился
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)
Это также помогает при кодировании, если имена переменных описательны ...
Sub fnCreatePalette(ByRef arr_in_pal() As color, ByRef arr_out_pal() as uinteger) ... End Sub
источник
Вы можете использовать метод передачи по ссылке в VB.NET.
Вам нужен механизм параметров Out в C #, потому что он не позволяет использовать никакую переменную без ее инициализации.
VB.NET не требует специального ключевого слова, так как он делает это автоматически.
Просто используйте ByRef.
источник
VB имеет атрибут, который должен быть таким же, как C #, но сегодня вы все равно получаете предупреждение, даже если вы его используете. Подробности о том, как это исправить, можно найти в разделе vblang на гитхабе. https://github.com/dotnet/vblang/issues/67 .
источник
Используйте ключевое слово ByRef перед переменной.
источник
ByRef
эквивалентенref
параметрам в C #, которые необходимо инициализировать перед передачей в функцию.