Конструкция, подобная x = x++;
, указывает, что вы, вероятно, неправильно понимаете, что делает оператор ++
:
// original code
int x = 7;
x = x++;
Давайте перепишем это, чтобы сделать то же самое, на основе удаления оператора ++
:
// behaves the same as the original code
int x = 7;
int tmp = x; // value of tmp here is 7
x = x + 1; // x temporarily equals 8 (this is the evaluation of ++)
x = tmp; // oops! we overwrote y with 7
Теперь давайте перепишем его, чтобы сделать (что я думаю) вам хотелось:
// original code
int x = 7;
x++;
Тонкость здесь в том, что ++
оператор изменяет переменная x
, в отличие от выражения, такого как x + x
, которое будет оценивать значение int, но оставить переменную x
самой неизменной. Рассмотрим конструкцию как почтенный цикл for
:
for(int i = 0; i < 10; i++)
{
System.out.println(i);
}
Обратите внимание на i++
там? Это тот же оператор. Мы могли бы переписать этот цикл for
как это, и он будет вести себя одинаково:
for(int i = 0; i < 10; i = i + 1)
{
System.out.println(i);
}
В большинстве случаев я также рекомендую не использовать оператор ++
в больших выражениях. Из-за тонкости , когда он изменяет исходную переменную в сравнении с последующим приращением (++x
и x++
, соответственно), очень легко ввести тонкие ошибки, которые трудно отследить вниз.
using System;
namespace PF_Claas_Assign1
{
class Program
{
static void Main(string[] args)
{
DateTime Greeting = DateTime.Now;
if (Greeting.Hour >= 5 && Greeting.Hour < 12)
{
Console.WriteLine("Good morning....!");
}
else if (Greeting.Hour >= 12 && Greeting.Hour < 16)
{
Console.WriteLine("Good afternoon...!");
}
else if (Greeting.Hour >= 16 && Greeting.Hour < 20)
{
Console.WriteLine("Good evening...!");
}
else
{
Console.WriteLine("Good night...!");
}
}
}
}