Visual Studio'da "[bazı olaylar] hiç kullanılmamış" derleyici uyarılarından nasıl kurtulurum?


93

Örneğin, bu derleyici uyarısını alıyorum,

'Company.SomeControl.SearchClick' olayı asla kullanılmaz.

Ancak bunun kullanıldığını biliyorum çünkü yorum yapmak beni bu olayı kullanmaya çalışan XAML sayfalarının 20 yeni uyarısı gibi atıyor!

Ne oluyor? Bu uyarıdan kurtulmanın bir yolu var mı?


1
Lütfen bir örnek gönderir misiniz?
John Saunders

Yanıtlar:


145

Bu uyarı 67 gibi görünmektedir ve bu nedenle şu şekilde bastırılabilir:

#pragma warning disable 67

Aşağıdakilerle mümkün olan en kısa sürede (olay bildiriminden sonra) geri yüklemeyi unutmayın:

#pragma warning restore 67

Bununla birlikte, tekrar kontrol eder ve olayı sadece abone olarak değil, bir yerde yükselttiğinizden emin olurum . Derleyicinin olayı yorumladığınızda 20 hata değil 20 uyarı vermesi de şüphelidir ...

Ayrıca bu uyarı ve özellikle arayüzler için nasıl geçerli olduğu hakkında ilginç bir makale var; "kullanılmayan" olaylarla nasıl başa çıkılacağına dair güzel bir öneri var. Önemli kısımlar:

Doğru cevap, olaydan ne beklediğiniz konusunda açık olmaktır, bu durumda bu hiçbir şey değildir:

public event EventHandler Unimportant
{
    add { }
    remove { }
}

Bu, uyarının yanı sıra normal bir olayın derleyici tarafından üretilen ekstra uygulamasını temiz bir şekilde bastıracaktır. Ve bir başka ek fayda olarak, bu hiçbir şey yapmama uygulamasının gerçekten en iyi uygulama olup olmadığını düşünmeye sevk eder. Örneğin, olay desteklenmediği kadar önemsiz değilse, işlevselliğe güvenen istemcilerin onsuz başarısız olma olasılığı yüksekse, destek eksikliğini açıkça belirtmek ve bir hata atarak hızlı bir şekilde başarısız olmak daha iyi olabilir. istisna:

public event EventHandler Unsupported
{
    add { throw new NotSupportedException(); }
    remove { }
}

Elbette, işlevselliğinin bazı kısımları olmadan yararlı bir şekilde uygulanabilen bir arayüz bazen arayüzün en iyi şekilde uyumlu olmadığının ve ayrı arayüzlere bölünmesi gerektiğinin bir göstergesidir.


İşte ihtiyacım olan şey bu! Teşekkür ederim! Tek fark, 67'nin yanına kendi yorumumu eklemem ve böylece gelecekte ne olacağını bilmem. İşte "tam olarak" yazdığım şey ... #pragma uyarı devre dışı bırak 67 // olay hiçbir zaman kullanılmamış genel olay RoutedEventHandler SearchClick; #pragma uyarı geri yükleme 67
jedmao

12
Bu harika bir bağlantı. Teşekkürler.
Max Palmer

Bu kullanışlı; yerinde kalmayacak, ama sadece mevcut fikrin çalışmasını sağlayacak bir şey ...
dudeNumber4

78

Bir arayüzden bir olay uygulamaya zorlanırsanız, uygulamanızın ihtiyaç duymadığı durumlarda, uyarıyı önlemek için aşağıdakileri yapabilirsiniz.

public event EventHandler CanExecuteChanged { add{} remove{} }

Bunu yaparsam, daha sonra yaptığım dosyada if(OnCompleteOpenEvent != null) OnCompleteOpenEvent();"OnCompleteEvent mevcut bağlamda mevcut değil" yazıyor.
Almo

@Almo, bu doğru. Ancak, olayı kullanmakta OLDUĞUNUZ durumu açıklıyorsunuz ve bu nedenle uyarı görünmeyecek, böylece düzeltmeyi uyarı için kullanmayacaksınız. Sağ? Genellikle olayı ve iki alt sınıfı belirten bir arayüzünüz vardır. Kişi olayı kullanmaz ve bu çözümü kullanır. Diğeri olayı kullanır ve başlama uyarısını asla atmaz.
Dirk Bester

Çok uzun zaman oldu, ancak kullanılmasına rağmen bu hatayı alıyorduk. Derleyiciyi kandırarak onun kullanılmadığını düşünmesine neden olacak şekilde tanımlanmasıyla bir ilgisi vardı.
Almo

Çok can sıkıcı bir duruma bu kolay çözüm için çok teşekkür ederim!
M463

16

İkinci en iyi yol, birisi abone olmaya çalıştığında bir istisna atarak etkinliğin desteklenmediğini açıkça belirtmektir.

public event RoutedEventHandler SearchClick
{
    add { throw new NotSupportedException(); }
    remove { throw new NotSupportedException(); }
}

Bunun bir çeşidi olarak, etkinlikteki abonelikleri sessizce yok saymak için addve removeyöntemlerini boş bırakabilirsiniz .

En iyi çözüm, kodu yeniden düzenlemek, belki de olayın bildirimini mümkünse uygulayıcıya çekmektir.

Son çare olarak, uyarıyı bu şekilde devre dışı bırakabilirsiniz.

#pragma warning disable 67
public event RoutedEventHandler SearchClick;
#pragma warning restore 67

Burada boş nesnelerin ne kadar alakalı olduğunu
anlamıyorum

Boş nesnenin ne olduğunu biliyorum ve bu kullanım durumu son paragrafta ele alınmıştır. Lütfen cevabın tamamını dikkatlice okuyunuz.
vidstige

Boş nesnenin ne olduğunu biliyorum. Bu kullanım durumunun son paragrafımın kapsadığına inanıyorum.
vidstige

3

Ayrıca aşağıdakileri de yapabilirsiniz:

public event EventHandler MyEvent = delegate {}

1

Derleyici görünüşe göre XAML kodunda kullanıldığının farkında değil. Olay tanımınızdaki uyarıyı bastırmayı deneyin.

Ayrıca, olayı gerçekten bir yerde gündeme getirdiğinizden emin olun.


Ben de öyle düşündüm, bu yüzden XAML kodunu arkasındaki koda taşıdım ve aynı uyarıyı gösterdi! Ve evet, olayın bir yerlerde gündeme geldiğinden% 100 eminim. Ben ona bakıyorum. Bir düğmeye bağlı.
jedmao

1

Bireysel uyarıları bastırabilirsiniz.

\Program.cs(13,20): warning CS0219: The variable 'foo' is assigned but its value is never used

Bu durumda, CS0219, atanan ancak kullanılmayan değişkenlerle ilgili uyarıdır. / Nowarn: 0219 bayrağını kullanabilir veya projenin özellikler bölmesine hata numarasını ekleyebilirsiniz ("Oluştur" altında, baştaki CS'yi kaldırmayı unutmayın). Unutmayın , bu sınıfın tüm uyarılarını bastırır .


1

Veya <NoWarn>67</NoWarn>projenize ekleyebilirsiniz

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
  ...
  <NoWarn>67</NoWarn>
</PropertyGroup>

9
bu, kullanılmayan olaylarla ilgili gerçek sorunları potansiyel olarak gizleyen tüm projedeki uyarıyı devre dışı bırakır.
vidstige
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.