2012-05-19 3 views
1

На клиенте у меня есть массив int, на который я вызываю метод ToString; Затем я отправляю эту строку на сервер через ajax.преобразование строки в список int64

На сервере, я пишу это:

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

ли это происходит сбой, если входящая строка фактически содержит неожиданные значения?

Спасибо.

+0

Что вы хотите, если есть число, которое невозможно успешно проанализировать до конца? –

+0

Я хочу знать об этом и установить логическое значение false; Я обрабатываю данные, поступающие от клиента. – frenchie

ответ

2

Если строка содержит непредвиденные значения, она может выбросить 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? 
    } 
} 
+0

ОК, спасибо за совет. В любом случае, чтобы сделать его подходящим как однострочный синтаксис linq? – frenchie

+0

Я просто думаю, что это лучше, но, конечно, результат более важен. – frenchie

+0

@frenchie Вы всегда можете просто удалить все линии. –

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

Но это не очень хорошая идея, потому что запрос производит побочные эффекты, которые могут привести к неожиданному поведению, если запрос становится более сложным.

+0

+1 Мне нравится этот подход, но он не будет полностью решать проблему OP (если вы видите комментарии об установке логического значения в false) –

+0

@ReedCopsey: да, я большой поклонник простых решений с одним слоем, но Я просто понимаю, что для этого, foreach работает лучше. – frenchie

+0

@Thomas: upvoted из-за синтаксиса linq, который я люблю! – frenchie

Смежные вопросы