2010-06-17 9 views
12

Ho definito due proprietà "Nome" e "ID" per un oggetto che utilizzo per DisplayMember e ValueMember di un ComboBox con un'origine dati BindingList.Come risolvere l'avviso di "proprietà inutilizzata" di Resharper sulle proprietà esclusivamente per i membri Display/Value?

Ho recentemente installato Resharper per valutarlo. Resharper mi sta dando degli avvertimenti sull'oggetto che le due proprietà non sono utilizzate.

codice di esempio:

BindingList<ClassSample> SampleList = new BindingList<ClassSample>(); 
// populate SampleList 
cmbSampleSelector.DisplayMember = "Name"; 
cmdSampleSelector.ValueMember = "ID"; 
cmbSampleSelector.DataSource = SampleList; 

private class ClassSample 
{ 
    private string _name; 
    private string _id; 

    public string Name // Resharper believes this property is unused 
    { 
     get { return _name; } 
    } 

    public string ID // Resharper believes this property is unused 
    { 
     get {return _id; } 
    } 

    public ClassSample(string Name, string ID) 
    { 
     _name = Name; 
     _id = ID; 
    } 
} 

sto facendo qualcosa di sbagliato o è ReSharper all'oscuro di questo particolare utilizzo?

risposta

16

Il modo in cui JetBrains suggerisce di risolvere questi problemi è con i relativi attributi (disponibili da Resharper -> Opzioni -> Annotazioni codice). Aggiungere gli attributi al progetto/soluzione e quindi contrassegnare queste proprietà con l'attributo UsedImplicitly. Il resharper ora supporrà che le proprietà vengano utilizzate tramite Reflection o late bound o qualsiasi altra cosa.

+9

Ti suggerisco di mostrare un esempio, incluso come ottenere gli attributi. Alcune persone non capiscono questo. –

+1

Funzionerà anche per gli attributi (utilizzando l'attributo MeansImplicitUse). Esempio: [MeansImplicitUse ((ImplicitUseKindFlags.Instantiated | ImplicitUseKindFlags.Assign)] su un attributo che contrassegna un'iniezione di dipendenza –

+1

Per utilizzare le annotazioni di codice ReSharper, è necessario includere le dichiarazioni nel progetto. Per ulteriori informazioni, consultare [Pagina JetBrains sull'argomento] (http://www.jetbrains.com/resharper/webhelp/Code_Analysis__Annotations_in_Source_Code.html). Per una proprietà usata in reflection, ho trovato che l'attributo di cui avevo bisogno era '[Used Implicitly]'. – JYelton

3

Si stanno impostando le proprietà tramite riflessione (questo è il codice sopra indicato). Resharper può solo analizzare il comportamento statico (con alcune eccezioni molto limitate), quindi non può sapere che queste proprietà sono effettivamente utilizzate.

Tuttavia è possibile sopprimere semplicemente gli avvisi. Basta fare clic sul nome della proprietà e premere Alt-Invio, quindi scegliere l'opzione per sopprimere l'avviso. Ciò aggiungerà un // ReSharper per disabilitare il commento attorno al nome della variabile.

+0

ho scoperto i commenti di avviso di soppressione, tuttavia l'esempio è abbastanza semplificato; ci sono molti di questi combobox con vari oggetti, ecc. Preferirei non dover aggiungere tanti commenti. C'è un altro modo per impostare i membri Display e Value che non si basano sulla riflessione? – JYelton

+0

JYelton: Non che io sappia. Come ultima possibilità potresti anche sopprimere l'avviso a livello globale. –

+0

È anche possibile eliminare gli avvisi a livello di file. – ErikE

1

Quando le cose vengono utilizzate tramite la riflessione (che immagino sia ciò che il framework sta facendo nel tuo caso), il resharper non può dirlo (almeno nella sua forma attuale).

+1

C'è un altro modo per impostare i membri Display e Value che non si basano sulla riflessione? – JYelton

+0

No, solitamente sopprimo con un commento, quindi sposta il commento inizio/fine coppia per sopprimere l'intera classe. –

3

Solo per aggiungere alla risposta di David, in Resharper 8.xe versioni successive, aggiungere il plug-in Resharper.ExternalAnnotations a Resharper in Visual Studio (Resharper -> Extension Manager).

Quando ReSharper prossimo lamenta un unused property, è possibile fare clic sulla mano sinistra della piramide viola e selezionare Used Implicitly, che decorerà il campo/proprietà con un UsedImplicitlyAttribute.

Resharper UsedImplicitly

È quindi possibile aggiungere direttamente un riferimento alla JetBrains.Annotations.dll nel progetto, oppure si può scegliere di lasciare ReSharper aggiungere un piccolo file Annotations.cs al progetto che contiene la definizione Attribute (e altri come NotNullAttribute). Il file Annotations.cs si trova sotto l'icona Properties nella cartella della soluzione.

Adding Resharper Annotations.cs to your project

Per inciso, sarebbe stato bello essere in grado di aggiungere un Description all'attributo pure, ad esempio [UsedImplicitly(Description="Used by NUnit Theory/Reflected by Xyz, etc")], quindi nel frattempo dovremo commentare.

0

Per installare le annotazioni ReSharper:

PM> Install-Package JetBrains.Annotations 

Quindi è possibile aggiungere gli attributi digitando [UsedImplicitly] o utilizzando il menu contestuale (screenshot)

Esempio di codice:

using JetBrains.Annotations; 
class ClassSample 
{ 
    private string _name; 
    private string _id; 

    [UsedImplicitly] 
    public string Name // Resharper believes this property is unused 
    { 
     get { return _name; } 
    } 

    [UsedImplicitly] 
    public string ID // Resharper believes this property is unused 
    { 
     get { return _id; } 
    } 

    public ClassSample(string Name, string ID) 
    { 
     _name = Name; 
     _id = ID; 
    } 
} 
Problemi correlati