Я родом из фона python, где он часто говорил, что легче извиниться, чем запросить разрешение. В частности, с учетом двух фрагментов:
if type(A) == int:
do_something(A)
else:
do_something(int(A))
try:
do_something(A)
except TypeError:
do_something(int(A))
Тогда в большинстве сценариев использования второй будет быстрее, когда A обычно является целым числом (предполагая, что do_something нуждается в целых числах в качестве входных данных и будет быстро увеличивать его исключение), поскольку вы теряете логический тест из каждого цикла выполнения за счет более дорогостоящего исключения, но гораздо реже.
Что я хотел проверить, было ли это истинно в С#, или же логические тесты достаточно быстрые по сравнению с исключениями, чтобы сделать этот небольшой угловой случай?
О, и меня интересует только производительность релиза, а не отладка.
OK мой пример был слишком расплывчатым, попробуйте этот:
Наивное решение:
return float(A) % 20 # coerse A to a float so it'll only fail if we actually don't
# have anything that can be represented as a real number.
Логическое решение:
if isinstance(A, Number): # This is cheaper because we're not creating a new
return A % 20 # object unless we really have to.
else:
return float(A) %20
Решение, основанное на исключении:
try: # Now we're doing any logical tests in the 99% of cases where A is a number
return A % 20
except TypeError:
return float(A) % 20
Примеры использования FSO, подключений к базам данных или материала по сети лучше, но немного затянуты для вопроса.