1

クライアントには、ToString メソッドを呼び出す int の配列があります。次に、その文字列を ajax 経由でサーバーに送信します。

サーバー上で、私はこれを書いています:

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

着信文字列に予期しない値が実際に含まれている場合、これはクラッシュしますか?

ありがとう。

4

2 に答える 2

2

文字列に予期しない値が含まれている場合、のドキュメントに記載されているように、FormatExceptionまたはがスローされる可能性があります。OverflowExceptionConvert.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 に答える