What is the return value of an assignment in vb.net?

assignment-operator, return-value, vb.net

Solution

about how assignment working in .NET.

This is actually about how assignment works in VB, not in .NET.

This does not work in VB.Net. The = Operator in VB.Net merely "assigns the value on its right to the variable or property on its left."

What's the return value when I do an assignment?

As seen in the above statement, the assignment operator does not return a value in VB.Net.

Note that this differs from other .NET languages. For example, in C#, the assignment = Operator does what you're describing, and "stores the value of its right-hand operand in the storage location, property, or indexer denoted by its left-hand operand and returns the value as its result."

Dim a As Integer
Dim b As Integer
a = b = 3

Note that, with `Option Strict` specified, this will actually be an error: "Option Strict On disallows implicit conversions from 'Boolean' to 'Integer'."

This is because VB.Net sees this as two operations - it's basically trying to do:

Dim a As Integer
Dim b As Integer

Dim temp as Boolean
temp = (b = 3)
a = temp

So to add to my question, why does it work this way? Is it just because vb.net overloads the symbol = with two meanings (assignment and comparison)?

Well, it's how the language was designed. I suspect that you are correct, though, and since the same operator (=) is used as an assignment and a comparison is why VB was made this way. However, the original VB language was this way, and to keep the syntax for VB.Net the same (or as close as possible), I suspect this behavior was carried forward.

Problem

What's the return value when I do an assignment? For example, can I do this? (i.e. the assignment returns the value being assigned) ``` Dim a As Integer = 1 Dim b As Integer = 2 a = b = 3 ``` The question came up when I wrote this code today: ``` Dim updates = GetUpdates() While updates.Count > 0 Foo.ApplyUpdates(updates) updates = GetUpdates() End While ``` I kind of wish I could have written it this way... ``` While (updates = GetUpdates).Count > 0 Foo.ApplyUpdates(updates) End While ``` I know it's not as clean... (and I totally never declared `updates`) but it got me curious about how assignments work in .NET... is it a function with a return value? If so... what does it return? Edit I gave the first chunk of code a try. It looks like the compiler interprets it as assigning the result of comparing b and 3 to a... which is a compiler error of course. And for the second code chunk, I get that the operator `=` is not defined for what ever type `updates` is... i.e. it thinks it's a comparison, not an assignment. So to add to my question, why does it work this way? Is it just because vb.net overloads the symbol `=` with two meanings (assignment and comparison)?

Original source