powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Странное поведение программы
25 сообщений из 27, страница 1 из 2
Странное поведение программы
    #39896133
Супер_Пав
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги, утро доброе. Не могу понять, почему происходят следующие необъяснимые явления. Есть код:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
using (var oracleCmd = new OracleCommand(selectQuery))
{
    oracleCmd.Parameters.AddWithValue("id", id);
    using (var reader = AppDbContext.ExecuteReader(oracleCmd))    
        if (reader.Read() && 
            reader.GetInt32("VALUE_NUMBER") == 1)
            return false;
    
}
return true;


Записи в БД по ИД = id нету, когда отладкой прохожу по коду, то попадаю в return false в блоке if, а затем сразу в return true.
Если блок if обернуть в фигурные скобки, то попадаю только в return true. Почему такое происходит?
...
Рейтинг: 0 / 0
Странное поведение программы
    #39896142
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Супер_Пав
Почему такое происходит?

Потому что надо писать скобки. А твои лестницы на небеса без скобок разобрать ведь невозможно.
...
Рейтинг: 0 / 0
Странное поведение программы
    #39896163
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
Потому что надо писать скобки. А твои лестницы на небеса без скобок разобрать ведь невозможно.
при любом раскладе, как ты объяснишь выполнение двух return в одном методе (без делегатов и локальных функций)

Впрочем, поведение немного похоже на выполнение двух параллельных потоков. Тогда в отладке можешь получить останов в том же методе, но из другого потока
...
Рейтинг: 0 / 0
Странное поведение программы
    #39896177
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro
fkthat
Потому что надо писать скобки. А твои лестницы на небеса без скобок разобрать ведь невозможно.
при любом раскладе, как ты объяснишь выполнение двух return в одном методе (без делегатов и локальных функций)

Впрочем, поведение немного похоже на выполнение двух параллельных потоков. Тогда в отладке можешь получить останов в том же методе, но из другого потока


это по словам свидетеля, пусть он бы сначал объяснил, например, смысл написанного:

"Записи в БД по ИД = id нету, когда отладкой прохожу по коду, то попадаю в return false в блоке if, а затем сразу в return true.
Если блок if обернуть в фигурные скобки, то попадаю только в return true. Почему такое происходит?"

о какой записи речь? чего он ждет от приведенного кода?
...
Рейтинг: 0 / 0
Странное поведение программы
    #39896179
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин
о какой записи речь?
это-то как раз понятно - записи в БД нет, условие не должно выполниться.
...
Рейтинг: 0 / 0
Странное поведение программы
    #39896222
Супер_Пав
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
Супер_Пав
Почему такое происходит?

Потому что надо писать скобки. А твои лестницы на небеса без скобок разобрать ведь невозможно.

кто сказал, что надо? Когда в блоке выполняется 1 оператор, я никогда не пишу скобки...за редким исключением, например, когда создаю экземпляр класса с множеством св-в. Тогда да, чтобы код был более читабельным, добавляю скобки
...
Рейтинг: 0 / 0
Странное поведение программы
    #39896223
Супер_Пав
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro
fkthat
Потому что надо писать скобки. А твои лестницы на небеса без скобок разобрать ведь невозможно.
при любом раскладе, как ты объяснишь выполнение двух return в одном методе (без делегатов и локальных функций)

Впрочем, поведение немного похоже на выполнение двух параллельных потоков. Тогда в отладке можешь получить останов в том же методе, но из другого потока

Потоков нет, точнее есть, данные грузятся во вторичном потоке, но он один, кто выполняет приведенный код - это железно.
...
Рейтинг: 0 / 0
Странное поведение программы
    #39896227
Супер_Пав
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин
Shocker.Pro
пропущено...
при любом раскладе, как ты объяснишь выполнение двух return в одном методе (без делегатов и локальных функций)

Впрочем, поведение немного похоже на выполнение двух параллельных потоков. Тогда в отладке можешь получить останов в том же методе, но из другого потока


это по словам свидетеля, пусть он бы сначал объяснил, например, смысл написанного:

"Записи в БД по ИД = id нету, когда отладкой прохожу по коду, то попадаю в return false в блоке if, а затем сразу в return true.
Если блок if обернуть в фигурные скобки, то попадаю только в return true. Почему такое происходит?"

о какой записи речь? чего он ждет от приведенного кода?

у меня выполняется небольшой Select, выборка по id. Результатов всегда 2: нет записи, либо есть запись с числом в поле, которое я вытаскиваю. В данном случае записей нет, reader.Read() не должен отрабатывать. Но каким-то образом проходят аж 2 условия сразу. Просто, когда запись есть, я сперва попадаю в return false, а потом в return true. Фигурные скобки решают проблему, но почему, я не пойму...
...
Рейтинг: 0 / 0
Странное поведение программы
    #39896247
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Супер_Пав
Потоков нет, точнее есть, данные грузятся во вторичном потоке, но он один, кто выполняет приведенный код - это железно.

Чудес не бывает. Если вставить в самом начале кода
System.Diagnostics.Debug.WriteLine(System.Threading.Thread.CurrentThread.ManagedThreadId);
что получиться в Output?
...
Рейтинг: 0 / 0
Странное поведение программы
    #39896256
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro
при любом раскладе, как ты объяснишь выполнение двух return в одном методе (без делегатов и локальных функций)

Метод дважды извне вызывается с разными условиями. ТС не объясняет ведь что он имеет в виду под "попадает".

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
void Foo()
{
     Bar(true);
     Bar(false);
}

bool Bar(bool condition)
{
    if(condition)
    {
        return true;
    }
    else
    {
        return false;
    }
}


Поставить на обоих ретурнах точки останова и после остановки на первом сделать "Continue" - вот и попадешь сразу на вторую.

А вообще, отладка для лохов. Правильные пацаны давно пишут юнит-тесты.
...
Рейтинг: 0 / 0
Странное поведение программы
    #39896268
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
А вообще, отладка для лохов. Правильные пацаны давно пишут юнит-тесты.
А когда требуется отладка юнит-теста, правильные пацаны пишут юнит-тесты для юнит-теста
...
Рейтинг: 0 / 0
Странное поведение программы
    #39896269
Супер_Пав
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LR
Супер_Пав
Потоков нет, точнее есть, данные грузятся во вторичном потоке, но он один, кто выполняет приведенный код - это железно.

Чудес не бывает. Если вставить в самом начале кода
System.Diagnostics.Debug.WriteLine(System.Threading.Thread.CurrentThread.ManagedThreadId);
что получиться в Output?

Один раз выводит ИД потока (10). Вот скрин сделал, видно, что reader.Read() ничего не прочитал
...
Рейтинг: 0 / 0
Странное поведение программы
    #39896274
Супер_Пав
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в общем, по ходу глюк студии. Если брейкпоинт поставить на 2х ретёрнах, то return false не срабатывает. Если пошагово проходить, то срабатывает.
...
Рейтинг: 0 / 0
Странное поведение программы
    #39896275
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ты лучше точку останова на return false поставь
скорее всего туда не попадет
...
Рейтинг: 0 / 0
Странное поведение программы
    #39896277
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у тебя оптимизация кода не включена часом?
...
Рейтинг: 0 / 0
Странное поведение программы
    #39896281
Супер_Пав
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro
ты лучше точку останова на return false поставь
скорее всего туда не попадет

чуть выше написал, что так и сделал. Не попадает. Не, не включал
...
Рейтинг: 0 / 0
Странное поведение программы
    #39896282
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Супер_Пав
в общем, по ходу глюк студии
Вероятно, студия пытается поставить шаг на закрывающей скобке using-а, не находит скобку и промахивается

Если добавишь скобки, у тебя следующий шаг после проверки на скобке?
...
Рейтинг: 0 / 0
Странное поведение программы
    #39896308
Супер_Пав
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro
Супер_Пав
в общем, по ходу глюк студии
Вероятно, студия пытается поставить шаг на закрывающей скобке using-а, не находит скобку и промахивается

Если добавишь скобки, у тебя следующий шаг после проверки на скобке?

да, со скобками проверка не проходит и сл шаг на return true. Но это ооочень странно. Скобки ведь необязательны в данном случае
...
Рейтинг: 0 / 0
Странное поведение программы
    #39896316
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я не про это спрашиваю
останавливается ли отладчик при пошаговой отладке на скобке (при наличии скобки)?
...
Рейтинг: 0 / 0
Странное поведение программы
    #39896327
Супер_Пав
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro
я не про это спрашиваю
останавливается ли отладчик при пошаговой отладке на скобке (при наличии скобки)?

да
...
Рейтинг: 0 / 0
Странное поведение программы
    #39896346
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Супер_Пав
Shocker.Pro
я не про это спрашиваю
останавливается ли отладчик при пошаговой отладке на скобке (при наличии скобки)?

да
ну так вот. А когда скобки нет, VS растерялась и поставила точку не на той строке. То есть это не return false, это всего лишь закрытие using

Вообще, в многоэтажных конструкциях скобки стараются писать, потому что
Код: c#
1.
2.
3.
4.
5.
if (....)
  if (....)
    ..
else
  ..
...
Рейтинг: 0 / 0
Странное поведение программы
    #39896356
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro
Вообще, в многоэтажных конструкциях скобки стараются писать, потому что

Ну, лично у нас положено вообще их всегда писать. Потому что.
...
Рейтинг: 0 / 0
Странное поведение программы
    #39896369
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть места, где они реально загромоздят код, например проверка входных параметров

Код: c#
1.
2.
3.
4.
5.
6.
if 
  throw
if
  throw
if
  throw
...
Рейтинг: 0 / 0
Странное поведение программы
    #39896418
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro
Есть места, где они реально загромоздят код, например проверка входных параметров

Я бы с этим согласился, но, тут есть одна ловушка - кто-то их не ставит, потому что "код загромождает" а другой ставит, потому что ему так лучше читается, а потом в пятницу после работы набухались - и вот тебе и драка По мне так лучше, если ставить их где-либо (а где-либо их по-любому поставить придется), то ставить их тогда везде, а не решать каждый раз этот вопрос отдельно. К тому же, лично мне, так проще, чтобы не морочить всякий раз себе голову думой "а ставить ли мне тут скобки или нет".
...
Рейтинг: 0 / 0
Странное поведение программы
    #39896628
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Лень искать ошибку, но надо так

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
bool ret = true;
using (var oracleCmd = new OracleCommand(selectQuery))
{
    oracleCmd.Parameters.AddWithValue("id", id);
    using (var reader = AppDbContext.ExecuteReader(oracleCmd))    
        While(reader.Read()   {
            if (reader.GetInt32("VALUE_NUMBER") == 1) {
                ret = false;
                break;
            }
       }
}
return ret;



Хотя, разумеется, лучше проверять такие штуки непосредственно запросом к базе
...
Рейтинг: 0 / 0
25 сообщений из 27, страница 1 из 2
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Странное поведение программы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]