2010-07-21 4 views
3

Я иногда вижу методы в структуре .net с префиксом «Попробовать», например. int.TryParse (..).Есть ли «Try» соглашение?

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

Означает ли это, что если я пишу методы, у которых есть попытка уловить их (например, журнал, который я никогда не хочу поднимать исключение), они также должны иметь префикс «попробовать»?

ответ

7

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

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

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

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

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

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

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

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

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

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

0

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

Смежные вопросы