Frage

Ich habe eine Klasse mit zwei Konstruktoren, die wie folgt aussehen:

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

Wenn ich FxCop ausführen, meldet es richtig eine Verletzung von CA1062: ValidateArgumentsOfPublicMethods , denn wenn source im ersten Konstruktor null wird, wird es eine NullReferenceException auf source.Name werfen.

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

Ich kann eine Verlängerung Methode machen, die für null überprüft und gibt ihr Argument, aber es wäre hässlich. Auch wie ich sie verstehe, wäre es nicht die Warnung beheben, weil FxCop würde nicht erkennen, was es tut.

War es hilfreich?

Lösung

Wie das?

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

Andere Tipps

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ösen eine Ausnahme (oder ersetzt einen Standardwert) oder einen Anruf auf eine statische Methode, die für null und führt die entsprechende Ausnahme überprüft.

Da diese Frage vor einiger Zeit gefragt wurde, ich will nur mit den späteren Funktionen in C # beachten, können Sie jetzt diese auch verwenden:

public MyClass(SomeOtherClass source) : this(source, source?.Name) { }

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

In diesem Beispiel würde ich die Warnung sagen ignorieren oder deaktivieren, wenn Sie nicht wollen, es zu sehen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top