在客戶端上,我有一個int數組,我稱其爲ToString方法;然後,我通過ajax將該字符串發送到服務器。將字符串轉換爲int64列表
在服務器上,我寫這篇文章:
var TestList = (from string s in TheString.Split(',')
select Convert.ToInt64(s)).ToList<long>();
這種的崩潰,如果輸入的字符串實際上包含意外的值?
謝謝。
在客戶端上,我有一個int數組,我稱其爲ToString方法;然後,我通過ajax將該字符串發送到服務器。將字符串轉換爲int64列表
在服務器上,我寫這篇文章:
var TestList = (from string s in TheString.Split(',')
select Convert.ToInt64(s)).ToList<long>();
這種的崩潰,如果輸入的字符串實際上包含意外的值?
謝謝。
如果字符串包含意外值,則可能會拋出FormatException
或OverflowException
,如Convert.ToInt64(string)
的文檔中所述。
爲避免發生異常,您可以使用bool long.TryParse(string, out long)
。
List<long> testList = new List<long>();
foreach (string s in theString.Split(','))
{
long number;
if (long.TryParse(s, out number))
{
testList.Add(number);
}
else
{
// Do something?
}
}
你可以做一個單一的語句,但你需要一個輔助方法的幫助...
var TestList =
(from string s in TheString.Split(',')
let value = TryParseLong(s)
where value != null
select value.Value).ToList();
...
static long? TryParseLong(string s)
{
long result;
if (long.TryParse(s, out result))
return result;
return null;
}
注:實際上,你可以做沒有輔助方法:
long value;
var TestList =
(from string s in TheString.Split(',')
where long.TryParse(s, out value)
select value).ToList();
但它不是一個好主意,因爲查詢產生的副作用,這可能會導致意外的行爲,如果查詢變得更加複雜。
如果有一個不能成功解析的數字,你希望發生什麼? –
我想知道它,並設置布爾值爲false;我正在清理來自客戶端的數據。 – frenchie