2010-11-19 23 views
5

Şu anda bir üniversite projesi için C# 'da küçük bir AI çerçevesi (genetik algoritmalar/sinir ağları) geliştiriyorum..NET'teki algoritimsel kodu nasıl kullanırsınız?

Benim ilk endişe yeniden kullanılabilir bir çerçeve geliştiriyor, bu yüzden her şey oldukça modüler olması tasarlıyorum. Bunun bedelini (performans) ödediğimi biliyorum, ama kaybedeceğimden daha çok kazancım olduğunu hissediyorum (iki kat daha fazla zaman kaybetmek zorunda kalmadan iki kat daha fazla zaman kaybetmek zorunda kalmam) hatalar bulmak ve çok miktarda zaman kaybetmek için kodları monolitik bir blokta tanıtmak zor olan yeni şeyler eklemek için).

Temelde, benim kod, iddiaların farklı bölümlerinde çeklerin çok var istiyorum. XI yöntemini çalıştırırken gerçekten doğru bir durumda, vb. Olup olmadığını kontrol edin. Bu tür iddialar gelişirken faydalıdır, ancak sürüm kodundan uzak durmak isterim (yani, ayrılmak istediğime karar verdiğimde) Bu benim için son araştırma sonuçlarımı almak için çalışıyor. yöntemlerden

  1. System.Diagonists.Assert ailesini:

    Bunu gerçekleştirmenin birkaç yol görebilirsiniz.

  2. Kodu (x) daha sonra #if DEBUG çevrili InvalidStateException() atarsam

bunu yapacağını nasıl ve neden #endif/Having Sözleşmeler?

Ben de Ünitesi-Testler (ben onları kullanıyorum) farkındayım, ama aynı zamanda da kod üzerinde iddiaların çeşit olsun isterim. Bu yönteme

Util.Assert(a == b, "a == b"); 

Aramalar sadece olacaktır: Util adında bir sınıf tanımlı yöntemi varsayarak

[Conditional("DEBUG")] 
public static void Assert(bool condition, string message) 
{ 
    if (!condition) 
     throw new InvalidStateException("Assertion failed: " + message); 
} 

Ve böylece gibi iddia:

cevap

8

Böyle bir statik yöntemi kullanabilirsiniz DEBUG sembolü ayarlandığında derleyici tarafından yayılan ConditionalAttribute. Dolayısıyla, bu tür çağrıları #if yönergelerine sarmanıza gerek yoktur. Bu daha az kod karmaşasına yol açacaktır.

(yöntem kendisi hala derlenmiş unutmayın. Bu, farklı meclislerinde bu tür yöntemleri kullanmasını sağlar!)

+1

Kodu Yok Sözleşmeler benzer şekilde çalışıyor mu? Bunları, Yayınlama modunda tamamen kapatma fikrini veya böyle bir şeyi yaptım. –

+0

Belki. Dürüst olmak gerekirse buna aşina değilim. Benim cevabımdaki teknik, kullandığım yöntem, bu yüzden paylaşacağımı düşündüm. Kod Sözleşmelerinden daha iyi veya kötü olup olmadığını söyleyemem. – cdhowie

+0

cdhowie'nin söylediği şeyle giderdim. kod sözleşmesi çok daha fazlasını sunuyor ama muhtemelen sizin durumunuzda ihtiyacınız olan şey değil. Bu yüzden doğru araç kod satır içi satır içi # if, # else veya Debug.Asset() yerine Koşullu öznitelik ile süslenmiş yöntemleri kullanıyor düşünüyorum. –

0

#if/#endif avantajı ortadan assert işlevine çağrıdır sadece yani, ama aynı zamanda parametrelerini hazırlayan tüm çalışmalar (umarız yan etkileri yoktur ...).

+2

"[Conditional (...)]' ile aynı. – cdhowie

İlgili konular