2011-12-21 88 views
2

我有一個值,該值可以是一個盒裝(任何)數值類型,或可爲空的數字型的。我需要檢查該值是否爲零。如何確定值是否爲零?

基本上我有這樣的:

public bool IsZero(object value) 
{ 
    if (value == null) 
      return false; 

    //lifted from the mvc sources, so I guess it's exhaustive 
    HashSet<Type> numericTypes = new HashSet<Type>(new Type[] { 
     typeof(byte), typeof(sbyte), 
     typeof(short), typeof(ushort), 
     typeof(int), typeof(uint), 
     typeof(long), typeof(ulong), 
     typeof(float), typeof(double), 
     typeof(decimal) 
    }); 

    Type type = Nullable.GetUnderlyingType(value.GetType()) ?? value.GetType(); 

    if (!numericTypes.Contains(type)) 
     return false; 

    // how do I get the value here ? 
} 

我沒有看到一個簡單的方法有一個int零比較一個int值,並用0字節一個字節值。

一個解決方法我看到的是一個正確鍵入零值與每一個類型相關聯並覈對,但我想重用的解決方案,如果我最終我需要一個「IsOne」的方法。

回答

4

您可以用Convert.ToDouble方法結合你null檢查。

+0

很好的建議爲好, - 但是,這並一切工作,但小數在「0.00」的形式,因爲他們保留他們與小數:( – 2011-12-21 10:01:20

+0

@ShadowWizard必須有一個空檢查 - 我省略了這一點,因爲它已經出現在OP問題中。順便說一句好的答案! – 2011-12-21 10:05:52

8

這有什麼錯呢?

return value != null && value.ToString().Equals("0"); 
+0

我有我忽視的東西很明顯的感覺。只有高興你得到工作的解決方案:) – SWeko 2011-12-21 10:22:28

+0

@SWeko怪異的行爲進行了指定的精度!缺點是'null'也會被視爲零。 – 2011-12-21 11:12:11

0

我想看看值鑄造成類似一個字符串,然後做比較,所以不是逐字節比較,詮釋爲int等你施放一切字符串和比較。如果你不喜歡字符串,你可以將它們投射到任何你喜歡的地方,只要你確定它的值不會改變等等。

如果你想將每種類型與0值進行比較,可以使用其他(更長)的方法它自己的類型將是在這種類型上做一個case語句,但是最後你會得到更多的代碼。