Каково возвращаемое значение присваивания в 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