SORU
15 Temmuz 2009, ÇARŞAMBA


Eğer bir nesne C Bir sayı olup olmadığını kontrol etme#

.ToString() bir dize basamak içeren neden olur, böylece eğer bir nesne bir sayı olup olmadığını kontrol etmek istiyorum ve,*,* *6 7*

Mümkün olduğunca basit türü tarafından kontrol edilir .net (gibi: if (p is Number))?

Ya ben dize dönüştürmek, çift ayrıştırma deneyin Gerekir?

Güncelleme:Benim nesne netleştirmek için int, unit kayan nokta, çift kişilik, ve bir dize değil. Bu gibi xml nesne seri hale getirmek için herhangi bir işlevi yapmak için çalışıyorum:

<string>content</string>

ya

<numeric>123.3</numeric>

ya da özel bir durum ortaya.

CEVAP
15 Temmuz 2009, ÇARŞAMBA


Sadece temel sayısal türleri için bir tür denetimi yapmak gerekir.

Burada iş yapması gerektiğini uzatma yöntemi:

public static bool IsNumber(this object value)
{
    return value is sbyte
            || value is byte
            || value is short
            || value is ushort
            || value is int
            || value is uint
            || value is long
            || value is ulong
            || value is float
            || value is double
            || value is decimal;
}

Bu tüm sayısal türler kapsamalıdır.

Güncelleme

Deserialisation sırasında bir dizeden numarası ayrıştırmak için aslında gibi görünüyor. Bu durumda, muhtemelen en iyi double.TryParse kullanmak olacaktır.

string value = "123.3";
double num;
if (!double.TryParse(value, out num))
    throw new InvalidOperationException("Value is not a number.");

Tabii ki, bu uzun ondalık sayılar çok büyük tamsayılar işlemek değil, ama eğer bu durumda sen ne olursa olsun başka 14* / decimal.TryParse / *ek çağrıları eklemek gerek.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • AFISHAL

    AFISHAL

    7 Mart 2009
  • PaulGBelliveau

    PaulGBellive

    5 Mart 2009
  • Vicious Computers

    Vicious Comp

    14 EKİM 2006