|
try catch и throw new правильное использование
|
|||
---|---|---|---|
#18+
Добрый день. Сразу к делу: Есть метод ReadUserInfo, он читает данные из текстового файла, тут может возникнуть много эксэпшенов. как стандартных так и я могу добавить в метод throw new . Далее в коде я использую полученные данные в работе программы. к примеру Код: c# 1. 2. 3.
Первый вопрос: где обрабатывать исключения? Внутри метода ReadUserInfo или же снаружи? Вопрос второй: как мне правильно прервать работу программы идущей далее за сбойной частью кода Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Код примеров писал в браузере, могут быть описки. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2013, 12:09 |
|
try catch и throw new правильное использование
|
|||
---|---|---|---|
#18+
Возможно я не четко сформулировал задачу, извиняюсь за это. Могу уточнить если укажите на нужные моменты ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2013, 12:42 |
|
try catch и throw new правильное использование
|
|||
---|---|---|---|
#18+
По-хорошему обрабатывать исключения должен тот, кто использует данный метод. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2013, 12:52 |
|
try catch и throw new правильное использование
|
|||
---|---|---|---|
#18+
vindofs, Не понятно Есть метод ReadUserInfo, он читает данные из текстового файла, тут может возникнуть много эксэпшенов. как стандартных так и я могу добавить в метод throw new . что за эксепшены - основанные на какой-то логике (ну типа возраст Usera не может быть отрицательным), или просто отлов, существует ли файл, или нет? Если первое, то эксепшенов в этом коде имхо быть не должно - лучше их выбрасывать тут: Код: sql 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2013, 13:03 |
|
try catch и throw new правильное использование
|
|||
---|---|---|---|
#18+
Pallarisvindofs, Не понятно Есть метод ReadUserInfo, он читает данные из текстового файла, тут может возникнуть много эксэпшенов. как стандартных так и я могу добавить в метод throw new . что за эксепшены - основанные на какой-то логике (ну типа возраст Usera не может быть отрицательным), или просто отлов, существует ли файл, или нет? Если первое, то эксепшенов в этом коде имхо быть не должно - лучше их выбрасывать тут: Код: sql 1. 2. 3. 4. 5. 6.
А что не понятно? Если у нас есть метод ReadUserInfo, читающий из файла, и метод вызываюзий этот читающий метод, то ReadUserInfo бросает эксепшен, а вызывающий обрабатывает его. Или как ReadUserInfo должен в этом случае сам обработать исключение FileNotFoundException? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2013, 13:20 |
|
try catch и throw new правильное использование
|
|||
---|---|---|---|
#18+
vindofsА что не понятно? Ты написал, что могут быть много эксепшенов, как стандартных, так и твоих собственных throw. Не понятно было про собственные. Или как ReadUserInfo должен в этом случае сам обработать исключение FileNotFoundException? Да как угодно. Если вызывающему метод не важно, какая ошибка произошла - то метод ReadUserInfo можно целиком обернуть в try-catch, а в случае ошибки возвращать null или типа того. Ну а если юзеру надо сказать, что там случилось (нет файла, или он неправильной структуры, или нет прав доступа), при чем сделать это на верхнем уровне - тогда да, не нужно так делать. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2013, 13:41 |
|
try catch и throw new правильное использование
|
|||
---|---|---|---|
#18+
Спасибо за ответы На первый мой вопрос вы ответили, на второй нет. Сейчас поясню пример: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53.
Допустим у нас файл не смог прочитаться, эксепшен отловился. Сейчас в Main все равно вызовется метод irrpublic.Start(). По хорошему надо останавливать работу программы, так как смысла запускать Start при нерабочем ConfigureClient нету. Как это сделать правильно? Выбросить еще одно исключение внутри cath{} предыдущего обработчика? Если да, то какое именно. Спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2013, 13:44 |
|
try catch и throw new правильное использование
|
|||
---|---|---|---|
#18+
Che0, Код: c# 1. 2. 3. 4. 5.
Нет? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2013, 13:53 |
|
try catch и throw new правильное использование
|
|||
---|---|---|---|
#18+
Код: c# 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2013, 13:53 |
|
try catch и throw new правильное использование
|
|||
---|---|---|---|
#18+
а если void ConfigureClient, то обращатся к поле типа irrpublic.IsConfigure. Это понятно, а вариант с вызовом еще одного эксепешена не коректен? Или же просто если можно обойтись простой проверкой то обходить, иначе все таки выбрасывать еще одно исключение? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2013, 13:59 |
|
try catch и throw new правильное использование
|
|||
---|---|---|---|
#18+
Che0а если void ConfigureClient, то обращатся к поле типа irrpublic.IsConfigure. Это понятно, а вариант с вызовом еще одного эксепешена не коректен? Или же просто если можно обойтись простой проверкой то обходить, иначе все таки выбрасывать еще одно исключение? А смысл, если Уже было одно исключение ConfigureClient генерировать еще одно? Лучше тогда: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2013, 14:04 |
|
try catch и throw new правильное использование
|
|||
---|---|---|---|
#18+
vindofs, сори перепутал тебя с топикстартером, прошу прощения! ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2013, 14:04 |
|
try catch и throw new правильное использование
|
|||
---|---|---|---|
#18+
Che0По хорошему надо останавливать работу программы, так как смысла запускать Start при нерабочем ConfigureClient нету. Как это сделать правильно? Спасибо Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2013, 14:07 |
|
try catch и throw new правильное использование
|
|||
---|---|---|---|
#18+
vindofsChe0а если void ConfigureClient, то обращатся к поле типа irrpublic.IsConfigure. Это понятно, а вариант с вызовом еще одного эксепешена не коректен? Или же просто если можно обойтись простой проверкой то обходить, иначе все таки выбрасывать еще одно исключение? А смысл, если Уже было одно исключение ConfigureClient генерировать еще одно? Лучше тогда: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9.
Здесь, как я и говорил: Один генерирует, тот, кто вызывает - использует Но как Pallaris заметил, можно обработать как угодно. Рекомендация, из какой-то книжки была такая (своими словами): Если метод возвращает значение, то он должен возвращать значение, которое вызывающий код проверяет на корректность. Если метод void, то выкидывает эксепшен, который перехватывается вызывающим кодом. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2013, 14:09 |
|
try catch и throw new правильное использование
|
|||
---|---|---|---|
#18+
Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
Насколько я понимаю, обрабатывать эксепшенны надо "максимально близко" от их выбросов. Если я прав, то конструкция выше противоречит этому ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2013, 14:17 |
|
try catch и throw new правильное использование
|
|||
---|---|---|---|
#18+
Che0 Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
Насколько я понимаю, обрабатывать эксепшенны надо "максимально близко" от их выбросов. Если я прав, то конструкция выше противоречит этому Вы правы. Мой код не совсем корректен: Start() тоже может чего-то выкинуть. Палярис дал нужный код) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2013, 14:20 |
|
try catch и throw new правильное использование
|
|||
---|---|---|---|
#18+
Che0 Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
Насколько я понимаю, обрабатывать эксепшенны надо "максимально близко" от их выбросов. Если я прав, то конструкция выше противоречит этому А тут типа далеко что-ли? Просто еще Start охватывается для проверки, что может тебе не подходить ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2013, 14:20 |
|
try catch и throw new правильное использование
|
|||
---|---|---|---|
#18+
Спасибо за ответы, они мне помогли. Буду признателен на ссылки на литературу по данному вопросу, так как все нюансы сам не рассмотришь. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2013, 14:31 |
|
try catch и throw new правильное использование
|
|||
---|---|---|---|
#18+
Che0Спасибо за ответы, они мне помогли. Буду признателен на ссылки на литературу по данному вопросу, так как все нюансы сам не рассмотришь. Да как всегда: книги Совершенный код и шаблоны, а так же статьи в Интернете ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2013, 14:58 |
|
try catch и throw new правильное использование
|
|||
---|---|---|---|
#18+
Вопрос в догонку, Если в классе есть строгий порядок методов, в моей же примере Код: c# 1. 2.
Какие методы ограничение вызова одного Start()? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2013, 15:45 |
|
try catch и throw new правильное использование
|
|||
---|---|---|---|
#18+
Che0Вопрос в догонку, Если в классе есть строгий порядок методов, в моей же примере Код: c# 1. 2.
Какие методы ограничение вызова одного Start()? Через флаг - самое простое. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2013, 15:56 |
|
try catch и throw new правильное использование
|
|||
---|---|---|---|
#18+
vindofs, а эксепшены тут неприменимы? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2013, 16:00 |
|
try catch и throw new правильное использование
|
|||
---|---|---|---|
#18+
Che0vindofs, а эксепшены тут неприменимы? почему нет? все зависит от ситуации опять же. Если допускается просто игнорирование, то флаг (вам в руки:)), если надо в грубой форме сообщить, то кидайте исключение. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2013, 16:08 |
|
try catch и throw new правильное использование
|
|||
---|---|---|---|
#18+
Парни, много буков. Вот так должно быть: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
И вместо Console.WriteLine стоит использовать какой-нить логгер. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2013, 17:29 |
|
|
start [/forum/topic.php?fid=20&msg=38286779&tid=1404559]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
59ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 176ms |
0 / 0 |