如果無法將字符串解析爲int,有沒有返回null的方法?int.TryParse =如果不是數字,則爲null?
有:
public .... , string? categoryID)
{
int.TryParse(categoryID, out categoryID);
得到「無法從 '串出' 轉換爲 'OUT INT'
做什麼
編輯:
不再是相關的,因爲asp.net約束是解決問題的方法
/M
如果無法將字符串解析爲int,有沒有返回null的方法?int.TryParse =如果不是數字,則爲null?
有:
public .... , string? categoryID)
{
int.TryParse(categoryID, out categoryID);
得到「無法從 '串出' 轉換爲 'OUT INT'
做什麼
編輯:
不再是相關的,因爲asp.net約束是解決問題的方法
/M
首先,爲什麼你想爲一個字符串解析爲int,並堅持將結果返回到一個字符串?
方法簽名是
bool int.TryParse(string, out int)
所以你必須得到作爲第二個參數int
類型的變量。這也意味着如果解析失敗,則不會得到null
,而是該方法將簡單地返回false
。但你可以很容易地把它們拼在一起:
int? TryParse2(string s) {
int i;
if (!int.TryParse(s, out i)) {
return null;
} else {
return i;
}
}
**這個答案被低估了很多** 雖然這是一個可能的解決方案 - 它是一個糟糕的性能明智的,並且可能不是一個好的編程選擇。
我不會刪除它,因爲我想很多程序員可能不知道這一點,所以這裏是一個例子,如何不要做的事情:
使用嘗試,趕上
try
{
res = Int32.Parse(strVAR)
}
catch(exception ex)
{
return null;
}
int是一個值類型,這意味着沒有這樣的東西作爲null int。所以不,TryParse將永遠不會改變out參數,因此它是空的。
但是,你遇到的問題是,當你期待一個整數時,你將一個字符串傳遞給TryParse的out參數。
你需要像這樣...
Int categoryID = 0;
string strCategoryID = "somestringmaybeitsaninteger";
int.TryParse(strCategoryID, out categoryID);
有一個可爲空的int:int? – Dani 2009-11-13 14:17:26
Dani:'TryParse'但是返回'int',而不是'Nullable
int?實際上並不是一個整數類型...它是System.Nullable
TryParse
將返回false,如果字符串不能被解析。你可以使用這個事實來返回解析值,或者返回null。無論如何,我猜你正打算從你的方法返回int?
,那麼這將是這樣的:
public int? ParseInt(string categoryID)
{
int theIntValue;
bool parseOk = int.TryParse(categoryID, out theIntValue);
if(parseOk) {
return theIntValue;
} else {
return null;
}
}
下面是正確使用的Int32.TryParse
:
int? value;
int dummy;
if(Int32.TryParse(categoryID, out dummy)) {
value = dummy;
}
else {
value = null;
}
return value;
或者:value = int.TryParse(categoryID,out dummy)? dummy:null; – 2009-11-13 14:55:25
是的,絕對如此,但對新手來說這更不透明。 – jason 2009-11-13 15:04:34
@Dan:不會編譯;-)但是,我更喜歡這個解決方案(加上一個強制轉換,以便編譯它)。 – 2009-11-13 17:44:12
你想這樣做這個?
public int? Parse(string categoryID)
{
int value;
if (int.TryParse(categoryID, out value))
{
return value;
}
else
{
return null;
}
}
這個怎麼樣?
public int? ParseToNull(string categoryId)
{
int id;
return int.TryParse(categoryId, out id) ? (int?)id : null;
}
此解決方案可能會從轉換爲擴展方法中受益。 – 2009-11-13 14:28:08
它已經是我的應用程序中的擴展方法,但我不知道摩爾根想要什麼,所以我把它作爲一種方法。 – DigitalNomad 2009-11-13 14:39:09
你不需要在那裏使用id。一個int或一個null是一個有效的可空對象:)。 – Khanzor 2010-12-23 03:12:09
最簡單的...
Int N = Int.TryParse(somestring, N) ? N : 0;
它的工作原理「因爲它是從左向右計算的。沒有那麼容易。
當你想將它存儲到字符串中時,爲什麼要將它解析爲int? – 2009-11-13 14:17:08
順便說一下,字符串是一個引用類型,所以你不應該使它爲空。 (這是否編譯?) – 2009-11-13 14:17:51
我用這個asp.net mvc所以categoryID從url映射,所以我得到錯誤,如果我在url中傳遞字符串 – 2009-11-13 14:20:43