我需要檢查輸入是否爲int。是否有類似於Int.isWholeNumber()函數的類似於String.IsNullOrEmpty()的函數?是否有Int.isWholeNumber()函數或類似的東西?
有沒有辦法在if()
語句中驗證它,而不必在之前聲明int? (當你需要的TryParse()做)
編輯
我需要驗證的區域碼(五個數字)
我需要檢查輸入是否爲int。是否有類似於Int.isWholeNumber()函數的類似於String.IsNullOrEmpty()的函數?是否有Int.isWholeNumber()函數或類似的東西?
有沒有辦法在if()
語句中驗證它,而不必在之前聲明int? (當你需要的TryParse()做)
編輯
我需要驗證的區域碼(五個數字)
我不相信還有的BCL內的任何這樣的方法,但它的易寫一個(我假設你真的在談論一個字符串是否可以被解析爲整數):
public static bool CanParse(string text)
{
int ignored;
return int.TryParse(text, out ignored);
}
添加重載接受IFormatProvider
值等等,你需要它們。假設這是驗證,你可能想要擴展它以允許指定一系列有效值...
如果你正在做很多自定義驗證,你可能想看看Fluent Validation項目。
名人訪問。我想這不是因爲這個解決方案可能會讓我陷入困境,所以我不認爲它是=) – Niklas 2011-05-06 12:39:32
根據定義,int類型必須是整數。它必須是double,float或decimal類型的非整數。您始終可以嘗試測試輸入的類型。
或者,也許輸入是一個字符串?如果輸入是一個字符串,你可以嘗試搜索'。'或','字符(取決於文化)。或者你可以嘗試解析爲一個整數。
使用Int.TryParse
或者自定義功能。
function bool IsNumber(object number)
{
try
{
Convert.ToInt32(number.ToString());
return true;
}
catch
{
return false;
}
}
如果你要拋出一個異常,如果文本不是數字,你可能只需調用'int.Parse'就可以開始...(我也認爲你錯過了OP所說的「不需要在之前聲明int」的問題) – 2011-05-06 12:39:10
您可以通過擴展方法實現這一目標:
您使用
bool isNumber = "-1990".IsNumber();
這裏是代碼:
public static class NumberStringExtension
{
public static bool IsNumber(this string value)
{
int i = 0;
return int.TryParse(value, out i));
}
}
看看int.TryParse給你一個答案,確保輸入字符串中沒有小數點。 (如果有人輸入「1」作爲輸入這會給你一個假陽性。)
string input;
int ignored;
bool wholeNumber = int.TryParse(input, out ignored) && input.indexOf('.') == -1;
如果你只是想驗證它的if語句,你可以只是做
If (val % 1 > 0)
//not whole number
這不回答用戶的問題。這並不能確保用戶輸入的值甚至是一個數字。 – 2011-05-06 14:08:04
@Rhhound使用從來沒有實際說明它是什麼類型的輸入。我的假設是輸入是一種數字類型。如果輸入是一個數字類型,這實際上就像問題一樣工作。 – JMcCarty 2011-05-10 13:39:09
由於每一個int是一個整數,這是很容易:
public static bool IsWholeNumber(int i)
{
return true;
}
這是我見過的最差的功能。這甚至沒有接近他想做的事情。 – 2011-05-06 14:07:04
我從您的意見,您的實際問題是集「我怎麼確定這個字符串中包含有效瑞典郵政編碼?」瑞典郵政編碼是一個不以零開頭的五位數字。如果這是您實際必須解決的問題,則可以解決該問題。而不是試圖將字符串轉換爲整數,然後檢查整數,我只是寫支票說:
那樣簡單。如果你永遠不會對它進行數學運算,首先不要將它轉換爲整數。
這種方法將進一步推廣到更復雜的形式。我收集的瑞典郵政編碼通常以「SE-12 345」的形式編寫,即前綴「SE-」和數字2和3之間的空格。編寫一個處理該格式的整數驗證例程會非常困難,但編寫一個字符串驗證例程非常簡單。
更一般地,這說明了一些寫作問題的好建議。 詢問您實際上必須解決的問題。您假設一個解決方案 - 將字符串解析爲一個整數 - 然後開始詢問有關您假設的解決方案的問題。這會自動阻止任何人提供針對您真正問題的建議。也許有人閱讀這篇文章已經開發了一個郵政編碼驗證軟件庫;如果他們有,他們永遠不會知道從你原來的問題中告訴你。
我怎樣才能說這不是作爲一個聰明人呢?我的問題源於驗證區號,但我的實際問題與它無關。我只想知道如何在一行代碼中驗證int。DB只有一個長度爲5的整數(我沒有設計它,也不傾向於重新設計它)。約翰的回答是精確的,並且重要。並不是我不欣賞你的回答和你的努力! – Niklas 2011-05-06 22:31:42
你是什麼意思的整數?非負? – Aliostad 2011-05-06 12:34:06
什麼問題在之前聲明int?當然你可以編寫正則表達式來驗證只有數字的輸入,但我認爲它會比int.TryParse更昂貴。 – VikciaR 2011-05-06 12:36:01
所以輸入是一個字符串? – 2011-05-06 12:36:10