2009-06-29 7 views
8

Mam klasy z dwóch konstruktorów, które wyglądają tak:CA1062: ValidateArgumentsOfPublicMethods dotyczące jednoczesnego konstruktora nazywa

public MyClass(SomeOtherClass source) : this(source, source.Name) { } 
public MyClass(SomeOtherClass source, string name) { /* ... */ } 

Kiedy uruchomić FxCop, słusznie zgłasza naruszenie CA1062: ValidateArgumentsOfPublicMethods, bo jeśli source jest null w pierwszy konstruktor, rzuci NullReferenceException na source.Name.

Czy istnieje sposób na naprawienie tego ostrzeżenia?

Mogę zrobić metodę rozszerzenia, która sprawdza wartość zerową i zwraca jej argument, ale byłaby brzydka. Ponadto, jak rozumiem, nie rozwiąże to ostrzeżenia, ponieważ FxCop nie zda sobie sprawy z tego, co robi.

Odpowiedz

10

Podoba Ci się to?

public MyClass(SomeOtherClass source) : this(source, source == null ? null : source.Name) { } 
public MyClass(SomeOtherClass source, string name) { /* ... */ } 
+0

Tak, to wszystko. Możesz także użyć dowolnej metody statycznej. – Groo

0

Powiedziałbym, że jedynym sposobem na naprawienie tego ostrzeżenia byłoby wyłączenie go. FxCop to świetne narzędzie, ale czasami trzeba pamiętać, że jest to tylko narzędzie i może sugerować, że nie zawsze pasuje do kodu.

W tym przykładzie chciałbym zignorować ostrzeżenie lub wyłączyć je, jeśli nie chcesz tego oglądać.

1

Istnieją uzasadnione razy, aby wyłączyć ostrzeżenia FxCop i to może bardzo dobrze być jeden, ale można rozwiązać ten problem przez którąkolwiek potrójnego wyrazu, który sprawdza za nieważną i zgłasza wyjątek (lub podstawia wartość domyślna) lub wywołanie statycznej metody sprawdzającej wartość NULL i zgłasza odpowiedni wyjątek.