简体   繁体   中英

Initialization expression in c#

I have the following line of code

int i = (i = 20);

and it sets the value of i to 20. Now my question is, are the two statements same ?

int a = 0;

int i = (a = 20);

and

int a = 0;

int i = a = 20;

Both the statements will set the values as i = 20 and a = 20 . What's the difference?

If they are same then why are there braces for equating the value?

From MSDN :

The assignment operators are right-associative, meaning that operations are grouped from right to left. For example, an expression of the form a = b = c is evaluated as a = (b = c).

Yes, those two are the same - but I would strongly discourage you from initializing variables like this. I would much rather see:

int a = 0;
// Whatever the intervening code is

a = 20;
int i = a;

are the two statements same ?

Yes. Just as

int x = 2 + 2;

and

int x = (2 + 2);

are the same.

What's the difference?

There is no difference. They're the same.

There are some rare cases in which there should be a difference between a parenthesized and an unparenthesized expression, but the C# compiler actually is lenient and allows them. See Is there a difference between return myVar vs. return (myVar)? for some examples.

If they are same then why are there braces for equating the value?

I don't understand the question. Can you clarify the question?

A question you did not ask:

Why is it legal to say "int i = (i = 20);"

It is a strange thing to do, but legal. The specification states that int i = x; is to be treated the same as int i; i = x; int i; i = x; So therefore this should be the same as int i; i = (i = 20); int i; i = (i = 20); .

Why then is that legal? Because (1) the result of an assignment operator is the value that was assigned. (See my article on the subject for details: http://blogs.msdn.com/b/ericlippert/archive/2010/02/11/chaining-simple-assignments-is-not-so-simple.aspx ) And (2) because the definite assignment checker ensures that the local variable is not written to before it is read from. (It is never read from in this case; it is written to twice.)

Order of Operations. When you put something in parenthesis it does that operation first.

And agreeing with the assignment of variables. It's better to do it vertically than horizontally. All on the same line can be confusing and more difficult with longer variables and assignments.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM