2009-06-29 12 views
8

Ho una classe con due costruttori che assomigliano a questo:CA1062: ValidateArgumentsOfPublicMethods sulla co-costruzione chiama

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

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

C'è un modo per correggere questo avviso?

Potrei creare un metodo di estensione che controlli null e restituisca il suo argomento, ma sarebbe brutto. Inoltre, come ho capito, non risolverebbe l'avviso perché FxCop non si renderebbe conto di ciò che fa.

risposta

10

Ti piace?

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

Sì, è tutto. Puoi anche usare qualsiasi metodo statico. – Groo

0

Direi che l'unico modo per correggere questo avviso sarebbe quello di disattivarlo. FxCop è un ottimo strumento, ma a volte è necessario ricordare che è solo uno strumento e può dare suggerimenti che non sempre si adattano al tuo codice.

In questo esempio direi di ignorare l'avviso o di disabilitarlo se non si desidera vederlo.

1

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 una chiamata a un metodo statico che verifica null e genera l'eccezione appropriata.