Есть ли соглашение "Попробуй"? - PullRequest
3 голосов
/ 21 июля 2010

Я иногда вижу методы в .net framework с префиксом «Try», например int.TryParse (..).

Я предполагаю, что это означает, что метод такой же, как int.parse, но обернутв ловушке try?

Означает ли это, что если я пишу методы, у которых есть попытка catch (например, регистрация, которую я никогда не хочу вызывать исключение), они также должны иметь префикс "try"

Ответы [ 3 ]

7 голосов
/ 21 июля 2010

Ваше предположение может быть верным, но это не означает методы типа Try***.

Обещание действительно заключается в том, что метод не будет генерировать исключение (как это происходит внутри системы, не имеет значения) при вызове.

Вы заметите, что эти методы возвращают логическое значение, указывающее, был ли Try*** успешным или нет.

Методы TryParse специально имеют параметр out, который будет заполнен результатом анализа в случае успеха.

Чтобы ответить на вопросы напрямую:

  • Специального соглашения не существует
  • Если семантика метода означает, что исключение не будет выброшено, но вызывающий код будет проинформирован об успехе / неудаче, вы можете назвать его Try***, так как это тип поведения, подразумеваемый таким именем
0 голосов
/ 21 июля 2010

Метод int.TryParse НЕ эквивалентен переносу try / catch в int.parse с точки зрения производительности.Цель int.TryParse - избежать причин влияния производительности на выброс исключений, поэтому нет смысла реализовывать int.TryParse как int.parse, завернутый в try / catch.

0 голосов
/ 21 июля 2010

Не существует соглашения в том же смысле, что и в асинхронных операциях (BeginXXX EndXXX), однако оно используется для различения кода, который будет выполнять то же самое, что и другой код, но не выдает исключения, либо путем проглатывания исключений, либо нет.генерируя их.

Если ваш код является альтернативой другому методу, который не обеспечивает обработку исключений, я бы поставил перед ним префикс Try, потому что он несколько опознан - и люди .NET сначала предполагают, что его поведение не вызовет исключения.

Это можно получить, возвратив логическое значение bool для успеха и поместив возвращаемое значение в качестве параметра out.

Чтобы ответить на вопрос, его не следует просто размещать вокруг какого-либо метода.это обрабатывает исключения;только в тех случаях, когда логически целесообразно предлагать поведение, которое я изложил;поведение, которое в настоящее время предлагается некоторыми экземплярами в .NET Framework.

...