Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
09.04.2015, 19:04
|
|||
---|---|---|---|
Исключения бросаются при дебаге, даже если перехватываются? |
|||
#18+
На строчке, помеченной комментарием, бросается исключение. При дебаге. При запуске даже debug варианта из файлового каталога - не бросается. Это нормальное поведение? Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
09.04.2015, 19:13
|
|||
---|---|---|---|
Исключения бросаются при дебаге, даже если перехватываются? |
|||
#18+
Не, ну это ваще уже! Как вам такой вариант - бросается исключение на помеченной строчке. При этом жму ф5 - и какой-то бесконечный цикл и постоянно на этой строчке бросается исключение. В дебаге. Из каталога если запустить, то сразу "закрыть программу". Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
09.04.2015, 19:20
|
|||
---|---|---|---|
Исключения бросаются при дебаге, даже если перехватываются? |
|||
#18+
НемоКэп42Не, ну это ваще уже! Как вам такой вариант - бросается исключение на помеченной строчке. При этом жму ф5 - и какой-то бесконечный цикл и постоянно на этой строчке бросается исключение. В дебаге. Из каталога если запустить, то сразу "закрыть программу". Это если там нормальный xml и правильный тип в нём засериализован. А если вообще файла нет или он пустой - постоянная ошибка в цикле "отсутствует корневой элемент). А если нормальный xml и неправильный тип - то CanDeserialize выдаёт false - это мне и надо. Я что-то ваще ничего не понял - CanDeserialize это не универсальная проверка? Т. е. он отработает на true или false только если там правильно сформированный xml? А на пустой файл или его отсутствие он кидает исключения сам? ЭТО ЖЕ САМЫЙ ПЛОХОЙ КОД! Такие методы не должны кидать исключений - они должны возвращать тру или фолс. Это Deserialize может кидать. Кто там этот фреймворк разрабатывает, мать его?! ... |
|||
:
Нравится:
Не нравится:
|
|||
|
09.04.2015, 19:36
|
|||
---|---|---|---|
Исключения бросаются при дебаге, даже если перехватываются? |
|||
#18+
НемоКэп42, дык у тебя XmlReader.Create(fs) кидает exception, или CanDeserialize? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
09.04.2015, 19:48
|
|||
---|---|---|---|
Исключения бросаются при дебаге, даже если перехватываются? |
|||
#18+
Короче, я запутался. Там эта хрень то кидает, то не кидает. То кидает, но только пару раз, а потом работает (в дебаге жмёшь два раза ф5). Брал пример отсюда https://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializer.candeserialize(v=vs.110).aspx И этот пример не работает, если не поставить поток в нулевую позицию после CanDeserialize и до Serialize. Например, так fs.Position = 0; Ну и ещё кучу проверок надо по-правильному делать: - есть ли файл; - пустой ли он; - правильная ли там схема документа (CanDeserialize кидает исключение, если там абракадабра или пустой файл) - хрен знает, как это валидно проверять; - потом только проверять через CanDeserialize; - и потом только использовать Deserialize. Пипец! ... |
|||
:
Нравится:
Не нравится:
|
|||
|
09.04.2015, 20:58
|
|||
---|---|---|---|
Исключения бросаются при дебаге, даже если перехватываются? |
|||
#18+
НемоКэп42Пипец! займись сельским хозяйством ... |
|||
:
Нравится:
Не нравится:
|
|||
|
09.04.2015, 21:59
|
|||
---|---|---|---|
Исключения бросаются при дебаге, даже если перехватываются? |
|||
#18+
Какая правильная последовательность действий при попытке десереализовать xml-файл? При этом условия: 1) файл может отсутствовать; 2) файл может быть, но пустой; 3) файл может быть, но не с расширением xml; 4) файл может быть с расширением xml, но не содержать валидный xml (может содержать всякую абракадабру или испорченный xml); 5) файл может быть с расширением xml, содержать валидный xml, но не тот сериализованный объект, что мне нужен; 6) файл существует и именно тот, что мне нужен. Я делаю так: 1) File.Exists() 2) - 4) XmlSerializer.CanDeserialize() 5) XmlSerializer.Deserialize() 6) XmlSerializer.Deserialize() Проблема в том, что на любом из этапов 2-4 метод XmlSerializer.CanDeserialize() не работает - бросает исключения. Ну и зачем этот метод нужен? Кстати, в МСДН не сказано, что этот метод может бросать исключения. А кроме того, он изменяет позицию потока, в котором XML, который он проверяет на десериализацию. Т. е. последующий за ним Deserialize должен начать с нулевой позиции, чтобы не выкинуть исключение. А этого тоже в МСДН нет. Зато там есть неправильный пример, который не содержит возвращение позиции в потоке на начало потока. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
10.04.2015, 03:22
|
|||
---|---|---|---|
|
|||
Исключения бросаются при дебаге, даже если перехватываются? |
|||
#18+
НемоКэп42На строчке, помеченной комментарием, бросается исключение. При дебаге. При запуске даже debug варианта из файлового каталога - не бросается. Это нормальное поведение? Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Потому что при запуске из каталога нет IDE, контрорлирующего исполнение кода - исключение попадает в catch-блок, и поскольку повторных пробросов в catch нет, программа идет себе дальше. В IDE при исключении сама же IDE и делает остановку в точке исключения. Эту остановку можно отключить: главное меню - Debug - Exceptions, найти тип исключения в ноде Common Language Runtime Exception, снять все галки. НемоКэп42Я что-то ваще ничего не понял - CanDeserialize это не универсальная проверка? Т. е. он отработает на true или false только если там правильно сформированный xml? А на пустой файл или его отсутствие он кидает исключения сам? На пустой файл исключение кидает XmlReader.Create. На отсутствующий файл исключение кидает конструктор FileStream. В обеих ситуациях до CanDeserialize дело еще не дошло. Ваш К.О. НемоКэп42ЭТО ЖЕ САМЫЙ ПЛОХОЙ КОД! Такие методы не должны кидать исключений - они должны возвращать тру или фолс. Это Deserialize может кидать. Кто там этот фреймворк разрабатывает, мать его?! Тот, кто хорошо понимает, где выбрасываются исключения. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
10.04.2015, 06:08
|
|||
---|---|---|---|
|
|||
Исключения бросаются при дебаге, даже если перехватываются? |
|||
#18+
НемоКэп42А кроме того, он изменяет позицию потока, в котором XML, который он проверяет на десериализацию. Т. е. последующий за ним Deserialize должен начать с нулевой позиции, чтобы не выкинуть исключение. А этого тоже в МСДН нет. Зато там есть неправильный пример, который не содержит возвращение позиции в потоке на начало потока. Если используется экземпляр XmlReader для проверки CanDeserialize, то и десериализацию нужно делать через XmlReader: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Вывод: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
10.04.2015, 06:11
|
|||
---|---|---|---|
|
|||
Исключения бросаются при дебаге, даже если перехватываются? |
|||
#18+
Ну, и да, пример в MSDN как бы тоже использует Deserialize(XmlReader) после проверки CanSerialize(XmlReader). И пример вполне правильный. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=20&mobile=1&tid=1401679]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
48ms |
get topic data: |
13ms |
get forum data: |
4ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
others: | 350ms |
total: | 490ms |
0 / 0 |