1

在客户端,我有一个整数数组,我在其上调用 ToString 方法;然后我通过 ajax 将该字符串发送到服务器。

在服务器上,我正在写这个:

var TestList = (from string s in TheString.Split(',')
                select Convert.ToInt64(s)).ToList<long>();

如果传入的字符串实际上包含意外的值,这会崩溃吗?

谢谢。

4

2 回答 2

2

如果字符串包含意外值,它可能会抛出 aFormatException或 an 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?
    }
}
于 2012-05-19T00:20:19.120 回答
2

你可以在一个语句中完成它,但你需要一个辅助方法的帮助......

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();

但这不是一个好主意,因为查询会产生副作用,如果查询变得更复杂,可能会导致意外行为。

于 2012-05-19T00:31:44.430 回答