2017-02-07 5 views
1

Может кто-нибудь объяснить, почему оператор C# ++ предоставляет разные выходы на основе назначенных переменных. https://msdn.microsoft.com/en-us/library/36x43w8w.aspxУнарный префикс Приращение ++ Оператор Различные выходы

int x = 0; 
int y = x++; 
Console.WriteLine($"x: {x}"); 
Console.WriteLine($"y: {y}"); 

/*Prints 
    * x: 1 
    * y: 0 
    */ 

Мое понимание y создается в x, что (0), то после назначения y; x увеличивается на 1;

int x = 0; 
x = x++; 
Console.WriteLine($"x: {x}"); 

/*Prints 
* x: 0 
*/ 

Почему такая же логика здесь не применяется? x должен быть установлен в x, который равен 0, то после того, как приращение назначения x на 1 и печать 1 вместо 0

же для этого примера

int x = 0; 
     x += x++; 
     Console.WriteLine($"x: {x}"); 
/*Prints 
* x: 0 
*/ 

еще один пример

int x = 0; 
     x += x++ + x++; 
     Console.WriteLine($"x: {x}"); 
     /*Prints 
     * x: 1 
     */ 

Кажется что на заднем плане происходит какая-то другая логика, которую я не понимаю.

+0

Подробное описание того, как работает оператор ++ (оба префикса и постфикса) в C#: http: // stackoverflow.com/a/3346729/1286670 –

+0

@Steve Я не уверен, было ли это намеренно или нет, но вы изменили «Унарный префикс приращения» ++ «Оператор» _ для _ «Унальный префикс приращения» + «Оператор» _ - нет такая вещь – MickyD

+0

Я считаю, что ответ Эрика Липперта, найденный @ Ňuf, охватывает все проблемы этого поста. Если там что-то еще не хватает - пожалуйста, отредактируйте сообщение и уточните, какие части требуют отдельного объяснения. Пожалуйста, не забудьте написать точную пошаговую аргументацию при редактировании - у вас должно быть не более пары дополнительных шагов в дополнение к 5 Eric для операции ++, чтобы охватить весь оператор 'x = x ++'. –

ответ

-1

У вас есть оператор неправильный путь для того, что вы пытаетесь сделать.

За документации:

Оператор инкремента может появиться до или после операнда: ++ переменной и переменной ++

Первая форма представляет собой операцию приращения префикса. Результатом операции является значение операнда после его увеличения.

Вторая форма - операция поэтапного приращения. Результатом операции является значение операнда до того, как он будет увеличен.

Так что в вашем примере кода, вы настраиваете y к xперед темx увеличивается. Если вы хотите установить y к новой стоимости x вам нужно использовать операцию инкремента префикс для увеличения x и есть результат будет новое значение, чтобы сделать с как вы хотите:

int x = 0; 
int y = ++x; 
Console.WriteLine($"x: {x}"); 
Console.WriteLine($"y: {y}"); 
/*Prints 
    * x: 1 
    * y: 1 
*/ 
+1

Я думаю, что OP работает, это то, что он читает код как 'int x = 0; х ++; x + = 0; 'который будет равен 1. –

2
int x = 0; 
x = x++; 

Первые операции - сохранить начальное значение x (0), второй операции - увеличение x (1), третью операцию - присвоить сохраненное значение для x (0)

int x = 0; 
x += x++; 

В этом случае первый операнд сложения «зависает» перед приращением (0), второй операнд «замерзает» до приращения тоже (0). В результате 0 + 0 = 0

Смежные вопросы