E 'che si verifica perché la classe implementa IDictionary<TKey, TValue>
; l'avviso scompare se si cancella (temporaneamente) la parte dell'interfaccia della firma della classe.
Dal momento che la "chiave" nel System.Collections.Generic.Dictionary
classe standard non può mai essere null
(viene generata ArgumentNullException
), direi che ReSharper sta facendo un presupposto errato.
Test del comportamento:
ho testato la classe in un progetto altrimenti vuoto e provato fuori. Sebbene ReSharper abbia oscurato tutto il codice, sicuramente è ancora eseguito in fase di runtime.
Il testo grigio indica ReSharper crede che la logica sarà sempre goccia attraverso al blocco else
, ma non è chiaramente il caso quando lo si utilizza.
Una correzione, utilizzando le annotazioni:
per aggirare il problema della ReSharper supponendo di default che la chiave non può essere null
, è possibile utilizzare il JetBrains annotazioni.
Aggiungere un riferimento all'assembly Annotazioni JetBrains. Per me, questa è stata la posizione:
C: \ Program Files (x86) \ JetBrains \ ReSharper \ v8.2 \ Bin \ JetBrains.Annotations.dll
quindi aggiungere una direttiva using a la parte superiore del file dove la classe è:
using JetBrains.Annotations;
ora mark quel parametro con l'attributo CanBeNull
e vedrete ReSharper non più grigi il testo:
public bool TryGetValue([CanBeNull] TKey key, out TValue value)
fonte
2014-12-20 14:13:06
Lo standard 'Dictionary' genera ArgumentNullException se la chiave è nullo, ma sembra che questa implementazione permette' null' di.Ha qualcosa a che fare con l'implementazione dell'interfaccia 'IDictionary', ma non sono sicuro che ReSharper abbia ragione, o se stia facendo un'ipotesi errata. –