Domanda

Ho una classe con due costruttori che assomigliano a questo:

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

Quando eseguo FxCop, si segnala correttamente una violazione dei CA1062: ValidateArgumentsOfPublicMethods , perché se è source null nel primo costruttore, si getterà un NullReferenceException su source.Name.

C'è un modo per risolvere questo avvertimento?

ho potuto fare un metodo di estensione che controlla nulla e restituisce il suo argomento, ma sarebbe brutto. Inoltre, a quanto mi risulta, non sarebbe risolvere l'avviso perché FxCop non avrebbe capito ciò che fa.

È stato utile?

Soluzione

Ti piace questa?

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

Altri suggerimenti

Ci sono momenti legittimi per spegnere gli avvertimenti FxCop e questo potrebbe benissimo essere uno, ma è possibile correggere il problema sia da un espressione ternaria che controlla nullo e genera un'eccezione (o sostituisce un valore di default), o di una chiamata ad un metodo statico che controlla nullo e genera l'eccezione appropriata.

Dal momento che questa domanda è stato chiesto qualche tempo fa voglio solo notare con le caratteristiche più tardi in C # Ora è possibile utilizzare anche questo:

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

Direi che l'unico modo per risolvere questo avvertimento potrebbe essere quella di spegnerlo. FxCop è un grande strumento, ma a volte è necessario ricordare che è solo uno strumento e può dare suggerimenti che non sono sempre raccordo al codice.

In questo esempio vorrei dire ignorare l'avviso o disattivarlo se non si vuole vedere.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top