2011-05-06 73 views
3

我需要檢查輸入是否爲int。是否有類似於Int.isWholeNumber()函數的類似於String.IsNullOrEmpty()的函數?是否有Int.isWholeNumber()函數或類似的東西?

有沒有辦法在if()語句中驗證它,而不必在之前聲明int? (當你需要的TryParse()做)

編輯
我需要驗證的區域碼(五個數字)

+0

你是什麼意思的整數?非負? – Aliostad 2011-05-06 12:34:06

+0

什麼問題在之前聲明int?當然你可以編寫正則表達式來驗證只有數字的輸入,但我認爲它會比int.TryParse更昂貴。 – VikciaR 2011-05-06 12:36:01

+0

所以輸入是一個字符串? – 2011-05-06 12:36:10

回答

10

我不相信還有的BCL內的任何這樣的方法,但它的易寫一個(我假設你真的在談論一個字符串是否可以被解析爲整數):

public static bool CanParse(string text) 
{ 
    int ignored; 
    return int.TryParse(text, out ignored); 
} 

添加重載接受IFormatProvider值等等,你需要它們。假設這是驗證,你可能想要擴展它以允許指定一系列有效值...

如果你正在做很多自定義驗證,你可能想看看Fluent Validation項目。

+4

名人訪問。我想這不是因爲這個解決方案可能會讓我陷入困境,所以我不認爲它是=) – Niklas 2011-05-06 12:39:32

0

根據定義,int類型必須是整數。它必須是double,float或decimal類型的非整數。您始終可以嘗試測試輸入的類型。

或者,也許輸入是一個字符串?如果輸入是一個字符串,你可以嘗試搜索'。'或','字符(取決於文化)。或者你可以嘗試解析爲一個整數。

1

使用Int.TryParse或者自定義功能。

function bool IsNumber(object number) 
{ 
    try 
    { 
    Convert.ToInt32(number.ToString()); 
    return true; 
    } 
    catch 
    { 
    return false; 
    } 
} 
+1

如果你要拋出一個異常,如果文本不是數字,你可能只需調用'int.Parse'就可以開始...(我也認爲你錯過了OP所說的「不需要在之前聲明int」的問題) – 2011-05-06 12:39:10

2

您可以通過擴展方法實現這一目標:

您使用

bool isNumber = "-1990".IsNumber(); 

這裏是代碼:

public static class NumberStringExtension 
{ 

    public static bool IsNumber(this string value) 
    { 
     int i = 0; 
     return int.TryParse(value, out i)); 
    } 

} 
+0

請注意,你可以在聲明後面寫下所有的東西:return int.TryParse(value ,出i)&& i> = 0;'。無論你認爲多一點還是不如長一點的形式是一種個人喜好:) – 2011-05-06 12:38:41

+0

我有一種癡迷於擴展方法,我無法抗拒它:) – Aliostad 2011-05-06 12:39:42

+0

擴展方法的工作,但爲什麼你會有「IsNonNegative」擴展名爲「 WholeNumberString「? – JMcCarty 2011-05-06 12:43:35

1

看看int.TryParse給你一個答案,確保輸入字符串中沒有小數點。 (如果有人輸入「1」作爲輸入這會給你一個假陽性。)

string input; 
int ignored; 

bool wholeNumber = int.TryParse(input, out ignored) && input.indexOf('.') == -1; 
-2

如果你只是想驗證它的if語句,你可以只是做

If (val % 1 > 0) 
    //not whole number 
+0

這不回答用戶的問題。這並不能確保用戶輸入的值甚至是一個數字。 – 2011-05-06 14:08:04

+0

@Rhhound使用從來沒有實際說明它是什麼類型的輸入。我的假設是輸入是一種數字類型。如果輸入是一個數字類型,這實際上就像問題一樣工作。 – JMcCarty 2011-05-10 13:39:09

0

由於每一個int是一個整數,這是很容易:

public static bool IsWholeNumber(int i) 
{ 
    return true; 
} 
+1

這是我見過的最差的功能。這甚至沒有接近他想做的事情。 – 2011-05-06 14:07:04

12

我從您的意見,您的實際問題是集「我怎麼確定這個字符串中包含有效瑞典郵政編碼?」瑞典郵政編碼是一個不以零開頭的五位數字。如果這是您實際必須解決的問題,則可以解決該問題。而不是試圖將字符串轉換爲整數,然後檢查整數,我只是寫支票說:

  • 是字符串五個字符長嗎?如果不是,拒絕它。
  • 是字符串1,2,3,4,5,6,7,8或9的第一個字符?如果不是,拒絕它。
  • 是字符串0,1,2,3,4,5,6,7,8或9的第二,三,四和五個字符?如果不是,拒絕它。

那樣簡單。如果你永遠不會對它進行數學運算,首先不要將它轉換爲整數。

這種方法將進一步推廣到更復雜的形式。我收集的瑞典郵政編碼通常以「SE-12 345」的形式編寫,即前綴「SE-」和數字2和3之間的空格。編寫一個處理該格式的整數驗證例程會非常困難,但編寫一個字符串驗證例程非常簡單。

更一般地,這說明了一些寫作問題的好建議。 詢問您實際上必須解決的問題。您假設一個解決方案 - 將字符串解析爲一個整數 - 然後開始詢問有關您假設的解決方案的問題。這會自動阻止任何人提供針對您真正問題的建議。也許有人閱讀這篇文章已經開發了一個郵政編碼驗證軟件庫;如果他們有,他們永遠不會知道從你原來的問題中告訴你。

+0

我怎樣才能說這不是作爲一個聰明人呢?我的問題源於驗證區號,但我的實際問題與它無關。我只想知道如何在一行代碼中驗證int。DB只有一個長度爲5的整數(我沒有設計它,也不傾向於重新設計它)。約翰的回答是精確的,並且重要。並不是我不欣賞你的回答和你的努力! – Niklas 2011-05-06 22:31:42

相關問題