2011-10-12 28 views
5

C# kodunda statik kod çözümlemesi kullanılarak yakalanmamış özel durumlar bulmak için bir araç olup olmadığını merak ediyorum? Temel olarak, bir methodA() seçmek ve methodA() tarafından atılan tüm istisnaların ve methodA() tarafından çağrılan tüm yöntemlerin bir listesini istiyorum. ReSharper + Agent Johnson ve AtomineerUtils'u denedim, her ikisi de bu basit görevi başarısız oldu.C# kodunda yakalanmamış özel durumları bulma

public class Rectangle 
{ 
    public int Width { get; set; } 
    public int Height { get; set; } 

    public int Area() 
    { 
     CheckProperties(); 
     long x = Width * Height; 
     if (x > 10) 
      throw new ArgumentOutOfRangeException(); 
     return (int) x; 
    } 

    private void CheckProperties() 
    { 
     if (Width < 0 || Height < 0) 
      throw new InvalidOperationException(); 
    } 
} 

aracı keresinde bir R # eklenti kullanılan ArgumentOutOfRangeException veya InvalidOperationException.

+3

, aslında şudur: buna değer eğer

kendiniz karar verin Bu yöntemleri her zaman gerçek tüketen sınıflarınızdan kullanmanız gerekir, muhtemelen bu alanın% 100 iyi olduğunu ve Alan'ın bir şey atmasını gerektirmeyeceğini ve Rectangle.Area'yı çağırması gerektiğini söyler. –

+0

@Davide Piras: Anladım Bu noktada, sizinle aynı fikirdeyseniz, ancak gerçekten kötü bir belgelere sahip olan büyük bir üçüncü taraf kütüphanesi kullandığınızı düşünün. Bu da istisnai bir durumdur (ya da “atılmış” diyebiliriz) istisnalar hata ayıklama ve geliştirmeyi gerçekten kolaylaştırır. – Korexio

cevap

6

atacağım (herhangi bir biçimde) bu yöntem Alanı() söyle mümkün olmalıdır:

İşte benim örnek kod Bunu IDE'de yaptı - Olağanüstü. Kötü fikir, her bir string hakkında şikâyetçi olduğunu ortaya koyuyor.Format çağrısı ve gerçekten atabilecek benzer ortak durumlar, ama bu sorunlara neden olmaz. https://github.com/CSharpAnalyzers/ExceptionalReSharper İstediğin ve nereye hala gitmek ama çalışıyoruz, koddan istisnalar atmak için ok birçok durumda olduğunu kabul ettiği şeyi görme

+0

Basit bir program kullandığımda "Console.WriteLine (new Rectangle(). Area());" Yukarıda verilen sınıf ile, istisna sadece bana Console.WriteLine (...) (System.IO.IOException yakalanmamış) için bir hata verir, ancak Alan() çağrısı için değil ... Diğer yolu bu yararlı olurdu, ama bu şekilde hiçbir gelişme yok ... – Korexio

+1

Boşver, sorun bulundu: Ben Area() yönteminde sorunu çözmedim - böylece olağanüstü çağrı ihmal edildi. Area() alanına belge eklemek, Main (...) 'de bir uyarıya yol açar. – Korexio

+0

Yukarıda açıklanan sorun olmadan (http://exceptionalplugin.codeplex.com/workitem/9632) Olağanüstü bir araç gibi görünüyor. Hala diğer araç önerileri kabul edilir! – Korexio

İlgili konular