2012-07-17 11 views
12

Ho questo codice nel mio MembershipProvider personalizzato:Confronta stringa su null - Perché Resharper pensa che questo sia sempre falso?

public override void Initialize(string name, System.Collections.Specialized.NameValueCollection config) 
{ 
    if (config == null) 
     throw new ArgumentNullException("config"); 

    if (name == null) 
     name = "MyCustomMembershipProvider"; 
    ... 
} 

ReSharper segna il secondo se-dichiarazione e mi dice, sarebbe sempre valutare false.

resharper message

Ma perché questo valutare sempre false? Potrei facilmente passare null al metodo come parametro.

Si tratta di un bug o di un riassuntore proprio qui?

PS 1: utilizzo il Resharper 6.1
PS 2: So che usare string.IsNullOrEmpty() sarebbe comunque il modo di andare qui. Sono solo curioso.

+1

Da quale classe deriva la classe? È uno di voi o uno dal framework .NET? –

+0

È il tuo codice completo? Sto usando ReSharper 6.1 e non ottengo quell'indicazione. –

+0

Sono derivato da MembershipProvider (in System.Web.Security) – magnattic

risposta

15

Probabilmente, l'argomento name è contrassegnato come [NotNull]. Il Resharper spedisce metadati del contratto per classi di BCL comuni.

+1

C'è qualche ragione per contrassegnare questo parametro di metodo in questo modo? È un metodo pubblico, cosa impedirebbe a chiunque di chiamarlo con un parametro null? – magnattic

+0

I metadati del contratto non devono essere accurati al 100%. È pensato per essere pragmatico. Penso che sia una buona cosa. – usr

+0

È interessante notare che ProviderBase ALSO esegue un controllo NULL per nome nonostante il contratto di codice [NotNull]. –

Problemi correlati