SORU
24 EYLÜL 2010, Cuma


vs("HATA") #eğer hata AYIKLAMA Koşullu

Kullanmak için daha iyi olduğunu, ve neden, büyük bir proje:

#if DEBUG
    public void SetPrivateValue(int value)
    { ... }
#endif

ya

[System.Diagnostics.Conditional("DEBUG")]
public void SetPrivateValue(int value)
{ ... }

CEVAP
24 EYLÜL 2010, Cuma


Gerçekten ne yaptığını bağlıdır:

  • #if DEBUG: buradaki kod bile bırakın IL ulaşamaz.
  • Bu kod IL ulaşacak, ancak bu yöntem çağrıları AYIKLAMA sürece çalıştırmaz. [Conditional("DEBUG")]:

Kişisel duruma bağlı olarak: ikisini de kullanıyorum

("") Hata AYIKLAMA Örnek: . koşullu ^/b>Geri dön ve benim kod yayın sırasında daha sonra düzenlemek zorunda değilim Bunu kullanıyorum, ama hata ayıklama sırasında herhangi bir yazım hatası yapmadım emin olmak istiyorum. Bu INotifyPropertyChanged eşyalarımı kullanmak için çalışırken bir özellik adını doğru yazın bunu kontrol edebilirsiniz.

    [Conditional("DEBUG")]
    [DebuggerStepThrough]
    protected void VerifyPropertyName(String propertyName)
    {
        if (TypeDescriptor.GetProperties(this)[propertyName] == null)
            Debug.Fail(String.Format("Invalid property name. Type: {0}, Name: {1}", GetType(), propertyName));
    }

Gerçekten 12 ** ile aynı: bu işlev her arama sarmak için istekli değilseniz, bir işlevi #if DEBUG kullanarak yaratmak istemedim

#if DEBUG
    public void DoSomething() { }
#endif

public void Foo()
{
    DoSomething(); //This will have a compilation error if you're not in DEBUG.
}


#if DEBUG
    public void DoSomething() { }
#endif

    public void Foo()
    {
#if DEBUG
        DoSomething(); //This works, but looks FUGLY
#endif
    }


[Conditional("DEBUG")]
public void DoSomething() { }

public void Foo()
{
    DoSomething(); //Code compiles and is cleaner, DoSomething always
                   //exists, however this is only called during DEBUG.
}

hata AYIKLAMA örnek ise#:XML iletişim için farklı bağlantıları Kur çalışırken bunu kullanıyorum.

#if DEBUG
        public const String ENDPOINT = "Localhost";
#else
        public const String ENDPOINT = "BasicHttpBinding";
#endif

İlk örnekte, bütün kodlar var, ama sadece hata AYIKLAMA olmadığı sürece göz ardı edilir. İkinci örnekte, sabit NOKTA "" veya "BasicHttpBinding" eğer hata AYIKLAMA set olup olmadığını bağlı olarak. Localhost için ayarlanır


Bu cevap bu soruya cevap verdi bu soruya cevap vermek çok önemli eklemek için güncelleme yapıyorum en yüksek olduğu. Çünkü güncelleme: Eğer aramaları derleme sırasında atlanan akılda ConditionalAttribute, sürekli kullanmak isterseniz, veçalışma zamanı değil. Yani:

MyLibrary.dll

[Conditional("DEBUG")]
public void A()
{
    Console.WriteLine("A");
    B();
}

[Conditional("DEBUG")]
public void B()
{
    Console.WriteLine("B");
}

Ne zaman kütüphane derlenmiş karşı yayın modu (örneğin, hata AYIKLAMA simge), sonsuza kadar aramak B() içinden A() ihmal, bile alıcı bir derleme derlenmiş karşı hata ayıklama.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • guau . .

    guau . .

    25 Ocak 2008
  • Monica Catral

    Monica Catra

    12 NİSAN 2009
  • Sams Page :D

    Sams Page :D

    15 Mart 2009