@nkurakov

Странные вещи в моем C# коде... Что происходит?

Есть кусок кода, который ломает мой мозг:

int timeNow = DateTime.Now.Hour;
            //int timeNow = 6;
            string hi = "";
            if ((timeNow >= 6) & (timeNow <= 12))
                hi = "Доброе утро, ";
            else if ((timeNow >= 12) & (timeNow <= 18))
                hi = "Добрый день, ";
            else hi = "Добрый вечер, ";
            labelHello.Text = hi + getName() + "!";

Проблема в следующем - какое бы значение не передавалось от DateTime.Now.Hour в переменную timeNow, ни одно из условий не выполняется. Проверил все досконально через отладчик.

DateTime.Now.Hour = 6 (скрин ниже)
62b366140df84267913233.png

Дальше timeNow = 6
62b366326acd1993813652.png

Казалось бы, тут проверка должна выполниться, если я все правильно понимаю, но
62b3665270504202268178.png

Нет. В итоге переменной hi присваивается значение "Добрый вечер". Я уже и вручную как видите ставил значение 6, и 7 пробовал, и 13, проверки так или иначе не выполняются.

В чем тут дело?
  • Вопрос задан
  • 174 просмотра
Пригласить эксперта
Ответы на вопрос 3
yarosroman
@yarosroman Куратор тега C#
C# the best
&& надо, & это булева операция, а не сравнение
Ответ написан
BasiC2k
@BasiC2k
.NET developer (open to job offers)
Все работает как надо: https://dotnetfiddle.net/qyC3vO
При timeNow = 6 пишет "Доброе утро"
Обратите внимание, что при timeNow = 12 у Вас предусмотрена обработка и в первом и во втором условии.
Ответ написан
Комментировать
Вроде всё работает
static string Greet(int hour)
{
    int timeNow = hour;
    string hi = "";
    if ((timeNow >= 6) & (timeNow <= 12))
        hi = "Доброе утро, ";
    else if ((timeNow >= 12) & (timeNow <= 18))
        hi = "Добрый день, ";
    else hi = "Добрый вечер, ";
    return hi;
}

Console.WriteLine(Greet(5)); // Добрый вечер
Console.WriteLine(Greet(6)); // Доброе утро
Console.WriteLine(Greet(7)); // Доброе утро
Console.WriteLine(Greet(11)); // Доброе утро
Console.WriteLine(Greet(12)); // Доброе утро
Console.WriteLine(Greet(13)); // Добрый день
Console.WriteLine(Greet(17)); // Добрый день
Console.WriteLine(Greet(18)); // Добрый день
Console.WriteLine(Greet(19)); // Добрый вечер


PS: в твоём случае вместо & лучше использовать &&, но в целом на работу это не влияет.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы