2012-11-28 23 views
5

2 nullable ikilileri var, beklenen bir değer ve gerçek bir değer (onlara değer ve değer olarak değinelim). 100 * (value/valueExpected) kullanılarak bir yüzde bulunur. Ancak, ValueExpected değeri sıfır ise, NaN değerini döndürür. Şimdiye kadar her şey iyi.Nullable çift NaN karşılaştırması C#

Şimdi, değeri kontrol edip NaN olup olmadığını görmek için ne yapmalıyım? (Isnan sadece sigara null değişkenler ile çalışır)

if (!Double.IsNaN(myDouble)) 

Ama bu null değerler ile çalışmaz: Normalde bir kullanabiliriz. Kodumu kontrol etmek için değiştirdim (valueExpected == 0), ama yine de merak ediyorum - null bir NaN'yi kontrol etmenin herhangi bir yolu var mı?

Düzenleme: Kod çalışmaz dediğimde, derleme yapmaz. Null için ilk test çalışmıyor.

cevap

10

Tüm Nullable<T> örnekleriyle, önce bool HasValue özelliğini kontrol edip T Value özelliğine erişebilirsiniz.

double? d = 0.0;  // Shorthand for Nullable<double> 
if (d.HasValue && !Double.IsNaN(d.Value)) { 
    double val = d.Value; 

    // val is a non-null, non-NaN double. 
} 
+0

Belki de beni engelliyor sadece görsel stüdyo ise çift

double.IsNaN((double)myDouble) 

ile bu NaN true ve yanlış dönecektir. Ben böyle bir şey var mı: ' if (myDouble = null!) { eğer { // şeyler yapın (Double.IsNaN (myDouble)!)! } } ' Ancak bu ve kodunuz derlenmiyor, yine de 'null' onayından sonra bile IsNaN kullanmaktan hoşlanmıyor. –

+1

"d" değişken adından sonra ".Value" ifadesini gördünüz. d.Value bir çift ve kesinlikle derlemesi gerekir. –

+0

Kodum düzgün çalışıyor. Eklediğiniz bir "null" işareti olup olmadığını kontrol etmez. Kodunuz hala yanlış. 'myDouble'' Null ' iken 'IsNaN()' bir 'double' bekler. **, ** .Value özelliğini kullanmanız gerekir. –

1

Ayrıca (kendi Nullable<> sarma çıkarılmış) bu boş olmayan, ya da sadece 0.0 ise myDouble ise ya bir myDouble olan en iç parantez içinde

if (!Double.IsNaN(myDouble ?? 0.0)) 

değeri kullanabilir null. Se ?? Operator (C#).

0

Aynı sorunu yaşadım ve iki katını çözerek çözdüm mü? değil