Каково возвращаемое значение присваивания в vb.net?
каково возвращаемое значение, когда я выполняю задание?
например, могу ли я это сделать? (т. е. присваивание возвращает присваиваемое значение)
Dim a As Integer = 1
Dim b As Integer = 2
a = b = 3
вопрос возник, когда я написал этот код сегодня:
Dim updates = GetUpdates()
While updates.Count > 0
Foo.ApplyUpdates(updates)
updates = GetUpdates()
End While
Я бы хотел, чтобы я мог написать это так...
While (updates = GetUpdates).Count > 0
Foo.ApplyUpdates(updates)
End While
Я знаю, что это не так чист... (и я полностью никогда не заявлял updates
) но мне стало любопытно, как работают назначения в .NET... это функция с возвращаемое значение? Если так... что она возвращает?
редактировать
я попробовал первый кусок кода. Похоже, компилятор интерпретирует его как присвоение результата сравнения b и 3 к a... конечно, это ошибка компилятора.
и для второго куска кода, я понимаю, что оператор =
не определяется для какого типа updates
- это... то есть он думает, что это сравнение, а не задание.
поэтому, чтобы добавить к моему вопросу, почему это так работает? Это просто потому, что vb.net перегружает символ =
С двумя значениями (назначение и сравнение)?
2 ответов
об уступке работаете .Нет.
это на самом деле о том, как назначение работает в VB, а не В. Сеть.
это не работает в VB.Net - ... The оператор= in VB.Net просто " присваивает значение справа переменной или свойству слева."
каково возвращаемое значение, когда я выполняю задание?
как видно из приведенного выше заявления, оператор присваивания не возвращает значение в VB.Net.
обратите внимание, что это отличается от других языков .NET. Например, в C# присваивание оператор= делает то, что вы описываете, и "сохраняет значение своего правого операнда в месте хранения, свойстве или индексаторе, обозначенном его левым операндом и возвращает значение в качестве результата."
Dim a As Integer
Dim b As Integer
a = b = 3
обратите внимание, что с Option Strict
указано, это будет фактически ошибка: "опция Strict On запрещает неявные преобразования из 'Boolean'в ' Integer'."
это потому, что VB.Net видит это как две операции-это в основном пытается сделать:
Dim a As Integer
Dim b As Integer
Dim temp as Boolean
temp = (b = 3)
a = temp
Итак, чтобы добавить к моему вопросу, почему это работает таким образом? Это просто потому, что vb.net перегружает символ = двумя значениями (присвоение и сравнение)?
Ну, это то, как был разработан язык. Я подозреваю, что вы правы, хотя, и поскольку тот же оператор ( = ) используется как назначение и сравнение-вот почему VB был сделан таким образом. Тем не менее, исходный язык VB был таким образом, и сохранить синтаксис для VB.Net то же самое (или как можно ближе), я подозреваю, что это поведение было продолжено.
В Visual Basic a = b = 3
переводится как нечто несколько неожиданное. Поскольку VB не имеет ==
оператор и вместо этого использует =
для обоих назначений и сравнения равенства приведенное выше выражение сводится к следующему:
If b = 3 Then
a = True
Else
a = False
End If