ArgumentNullException или NullReferenceException из дополнительного метода?

Другим вариантом является извлечение значений из списка argv с помощью try:

lira_cbt = sys.argv[1]
try:
  eur_hedge = sys.argv[2]
except IndexError:
  eur_hedge = None

if eur_hedge == None:
    # Do X
else:
    # Do Y

Вы также можете посмотреть getopt для более гибкого анализатора аргументы командной строки.

39
задан Patrik Hägne 27 January 2009 в 05:44
поделиться

5 ответов

В целом исключения включали, необходимо рассматривать дополнительный метод, как будто это был нормальный статический метод. В этом случае необходимо бросить ArgumentNullException.

Бросок NullReferenceException вот является плохой идеей по нескольким причинам

  • , нулевая ссылка А на самом деле не произошла, настолько видящий - парадоксален
  • , Бросок NullReferenceException и то, чтобы заставлять NullReferenceException произойти производят заметно различные исключения (Один способ видеть, что различием является код ошибки). Это верно для многих исключений, которые выдаются CLR.

Видят , Когда может Вы ловить StackOverflowException (сообщение, я сделал на этом предмете).

  • совершенно законно назвать дополнительный метод так же, как если бы это был обычный метод. В этом случае я был бы, конечно, не кроме NullReferenceException, но вместо этого ArgumentNullException.
36
ответ дан Stacked 7 July 2019 в 02:13
поделиться

С точки зрения пользователя, взглядов метода и действий как метод экземпляра, поэтому если бы я был ими, я ожидал бы видеть NullReferenceException.

Однако я предложил бы бросить или один или другой явно в коде, вместо того, чтобы, просто "оказаться", бросить тот как в Ваш первый пример.

1
ответ дан mqp 7 July 2019 в 02:13
поделиться

Кроме всех других ответов (которые хороши) я думаю, что это стоит посмотреть на то, что Microsoft делает ради непротиворечивости... и дополнительных методов в Счетном весь бросок ArgumentNullException, насколько я вижу.

25
ответ дан Jon Skeet 7 July 2019 в 02:13
поделиться

Так как дополнительные методы могут использоваться в C# 2.0, и их можно назвать точно так же, как статические методы (Вы не должны использовать их в качестве дополнительных методов), необходимо использовать ArgumentNullException.

Просто, потому что они взгляд как методы на типе не означают, что они, или всегда называются как один.

7
ответ дан casperOne 7 July 2019 в 02:13
поделиться

ArgumentNullException. Существует никакой требование для вызова дополнительных методов, как будто они были методами экземпляра. Можно назвать их, как будто они были нормальными методами. NullReferenceException был бы абсолютно неправильным в этом случае.

2
ответ дан Craig Stuntz 7 July 2019 в 02:13
поделиться