2010-06-17 12 views
12

Mam zdefiniowane dwie właściwości "Nazwa" i "ID" dla obiektu, który używam dla DisplayMember i ValueMember z ComboBox ze źródłem danych BindingList.Jak rozwiązać ostrzeżenie "nieużywane właściwości" programu Resharper dotyczące właściwości wyłącznie dla członków wyświetlaczy/wartości?

Niedawno zainstalowałem Resharper, aby go ocenić. Resharper daje mi ostrzeżenia na temat tego, że te dwie właściwości są nieużywane.

Przykładowy kod:

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; 
    } 
} 

robię coś źle lub jest Resharper pojęcia o tego konkretnego użytkowania?

Odpowiedz

16

Sposób, w jaki JetBrains sugeruje, aby rozwiązać te problemy, jest związany z ich atrybutami (dostępne w Resharper -> Opcje -> Adnotacje kodu). Dodaj atrybuty do projektu/rozwiązania, a następnie zaznacz te właściwości za pomocą atrybutu UsedImplicitly. Resharper założy teraz, że właściwości są używane przez odbicie lub późniejsze wiązanie lub cokolwiek innego.

+9

Proponuję pokazać przykład, w tym jak uzyskać atrybuty. Niektórzy ludzie tego nie rozumieją. –

+1

Będzie to również działać dla atrybutów (przy użyciu atrybutu MeansImplicitUse). Przykład: [MeansImplicitUse ((ImplicitUseKindFlags.Instantiated | ImplicitUseKindFlags.Assign)] na atrybucie oznaczającym wstrzyknięcie zależności –

+1

Aby użyć adnotacji kodu ReSharper, należy dołączyć deklaracje do projektu. Więcej informacji znajduje się na stronie [Strona JetBrains na temat] (http://www.jetbrains.com/resharper/webhelp/Code_Analysis__Annotations_in_Source_Code.html). Dla właściwości używanej w refleksji, znalazłem atrybut, którego potrzebowałem, to '[UsedImplicitly]'. – JYelton

3

Ustawiasz właściwości za pomocą odbicia (tak wygląda powyższy kod). Resharper może analizować tylko zachowanie statyczne (z pewnymi bardzo ograniczonymi wyjątkami), więc nie może wiedzieć, że te właściwości są faktycznie używane.

Można jednak po prostu wyłączyć ostrzeżenia. Wystarczy kliknąć nazwę nieruchomości i nacisnąć Alt-Enter, a następnie wybrać opcję wyłączenia ostrzeżenia. Spowoduje to dodanie // reSharper wyłączającego komentarz wokół nazwy zmiennej.

+0

Odkryłem pomijanie komentarzy ostrzegawczych, jednak przykład jest dość uproszczony; istnieje wiele takich comboboxów z różnymi przedmiotami itp. Wolałbym nie dodawać tylu komentarzy. Czy jest jakiś inny sposób ustawienia wyświetlania i wartości członków, które nie opierają się na odbiciu? – JYelton

+0

JYelton: Nie o tym wiem. W ostateczności możesz również wyłączyć globalne ostrzeżenie. –

+0

Możesz także wyłączyć ostrzeżenia na poziomie pliku. – ErikE

1

Kiedy rzeczy są używane poprzez odbicie (co wyobrażam sobie, co robi framework w twoim przypadku), resharper nie może powiedzieć (przynajmniej w jego obecnej formie).

+1

Czy jest jakiś inny sposób ustawienia wyświetlania i wartości członków, które nie opierają się na odbiciu? – JYelton

+0

Nie, zwykle pomijam z komentarzem, a następnie przesuwaj komentarz do początku/zamknięcia, aby pominąć całą klasę. –

3

Wystarczy dodać do odpowiedzi Davida, w Resharper 8.x i późniejszych, dodać wtyczkę Resharper.ExternalAnnotations do Resharpera w Visual Studio (Resharper -> Extension Manager).

Kiedy Resharper obok narzeka na unused property można następnie kliknij lewym purpurowy piramidy i wybierz Used Implicitly, które będą ozdobą Pole/nieruchomości o UsedImplicitlyAttribute.

Resharper UsedImplicitly

Następnie można bezpośrednio dodać odwołanie do JetBrains.Annotations.dll w projekcie, można też wybrać pozwolić Resharper dodać niewielką Annotations.cs plik do projektu zawierającego definicję Attribute (i innych podobnego NotNullAttribute). Plik Annotations.cs znajduje się pod ikoną Properties w folderze rozwiązania.

Adding Resharper Annotations.cs to your project

Tak na marginesie, to byłoby miło być, aby móc dodać Description do atrybutu, jak również, na przykład [UsedImplicitly(Description="Used by NUnit Theory/Reflected by Xyz, etc")], więc w międzyczasie będziemy musieli skomentować.

0

Aby zainstalować adnotacje Resharper:

PM> Install-Package JetBrains.Annotations 

Następnie można dodać atrybuty wpisując [UsedImplicitly] lub za pomocą menu (screenshot)

kontekstowe

przykładowy kod:

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; 
    } 
} 
Powiązane problemy