Rzucanie ArgumentNullException w konstruktorze?
Dla konstruktora z pojedynczym parametrem, czy można wrzucić ArgumentNullException do konstruktora, jeśli parametr jest null / empty? A może należy go wrzucić do metody, która faktycznie używa argumentu? Dzięki.
4 answers
Tak, jeśli jest to całkowicie istotne, to wyrzuć wyjątek. Nie należy * wyrzucać wyjątku później.
Zawsze pamiętaj o "zasada wczesnego niepowodzenia" . Koncepcja jest teraz nieudana, więc nie tracisz czasu na debugowanie ani nie doświadczasz nieoczekiwanej funkcjonalności systemu.
Alternatywnie możesz również rzucić ArgumentException dla "" i ArgumentNullException dla null. W obu przypadkach upewnij się, że rzuciłeś prawidłowy Komunikat o wyjątku.
Zawsze dobre odniesienie artykuł do zarządzania wyjątkami: dobre zasady zarządzania wyjątkami
Uwaga na to, co powiedział @ Steve Michelotti (bo jestem wielkim fanem Codecontractów)
Contract.Requires<ArgumentNullException>(inputParemeter!= null, "inputparameter cannot be null");
Contract.Requires<ArgumentException>(inputParemeter!= "", "inputparameter cannot be empty string");
Alternatywnie
Contract.Requires<ArgumentNullException>(!string.IsNullOrEmpty(inputParemeter), "inputparameter cannot be null or empty string");
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-02 18:20:59
Wrzucenie go do konstruktora jest w porządku - jest kilka klas w. NET framework, które to robią. Dodatkowo sprawdź code contracts w tym celu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-02 18:07:17
Z tego, jak to brzmi, przekazujesz parametr do konstruktora, który ma być przechowywany przez klasę do użycia w innej metodzie później. Jeśli nie używasz argumentu w konstruktorze, prawdopodobnie powinieneś pomyśleć o przeniesieniu argumentu do parametru metody, która jest w rzeczywistości używającej go.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-02 18:07:15
Umieściłbym czek w właściwości, którą ustawiłeś, gdy wywoływany jest konstruktor... W ten sposób wyjątek zostałby wyrzucony we wszystkich przypadkach.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-02 18:07:50