2009-06-29 6 views
8

ich eine Klasse mit zwei Konstrukteure haben, die wie folgt aussehen:CA1062: ValidateArgumentsOfPublicMethods auf Mitkonstrukteur ruft

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

Als ich FxCop ausführen, meldet es richtig eine Verletzung von CA1062: ValidateArgumentsOfPublicMethods, denn wenn sourcenull in der ist erster Konstrukteur, wird eine NullReferenceException auf source.Name werfen.

Gibt es eine Möglichkeit, diese Warnung zu beheben?

Ich könnte eine Extension-Methode, die auf Null überprüft und gibt sein Argument, aber es wäre hässlich. Auch, wie ich verstehe, würde es die Warnung nicht lösen, weil FxCop nicht realisieren würde, was es tut.

Antwort

10

Gefällt mir?

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

Ja, das ist es. Sie können auch jede statische Methode verwenden. – Groo

0

Ich würde sagen, der einzige Weg, um diese Warnung zu beheben, wäre es auszuschalten. FxCop ist ein großartiges Werkzeug, aber manchmal müssen Sie daran denken, dass es nur ein Werkzeug ist und Vorschläge machen kann, die nicht immer zu Ihrem Code passen.

In diesem Beispiel würde ich sagen, ignorieren Sie die Warnung oder deaktivieren Sie sie, wenn Sie es nicht sehen möchten.

1

Es gibt legitime Zeiten FxCop Warnungen auszuschalten und das sehr gut sein könnte, aber man kann das Problem entweder durch einen ternären Ausdruck korrigieren, die für null prüft und löst eine Ausnahme (oder ersetzt einen Standardwert) oder ein Aufruf einer statischen Methode, die auf null prüft und die entsprechende Ausnahme auslöst.