C# 将字符串转换为int64的列表

C# 将字符串转换为int64的列表,c#,C#,在客户机上,我有一个int数组,在该数组上调用ToString方法;然后我通过ajax将该字符串发送到服务器 在服务器上,我写了以下内容: var TestList = (from string s in TheString.Split(',') select Convert.ToInt64(s)).ToList<long>(); var TestList=(来自string.Split(',')中的字符串s) 选择Convert.ToInt64(s

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

在服务器上,我写了以下内容:

var TestList = (from string s in TheString.Split(',')
                select Convert.ToInt64(s)).ToList<long>();
var TestList=(来自string.Split(',')中的字符串s)
选择Convert.ToInt64(s)).ToList();
如果传入的字符串实际包含意外值,这会崩溃吗


谢谢。

如果字符串包含意外值,它可能会引发
格式异常
溢出异常
,如的文档中所述

为了避免异常,可以使用
bool long.TryParse(string,out long)

List testList=newlist();
foreach(string.Split(',')中的字符串s)
{
长数;
if(长锥虫(s,超出编号))
{
testList.Add(编号);
}
其他的
{
//做点什么?
}
}

如果字符串包含意外值,则可能引发
格式异常
溢出异常
,如的文档中所述

为了避免异常,可以使用
bool long.TryParse(string,out long)

List testList=newlist();
foreach(string.Split(',')中的字符串s)
{
长数;
if(长锥虫(s,超出编号))
{
testList.Add(编号);
}
其他的
{
//做点什么?
}
}

您可以在一条语句中完成,但需要助手方法的帮助

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;
}
注意:实际上,您可以不使用helper方法:

long value;
var TestList =
    (from string s in TheString.Split(',')
     where long.TryParse(s, out value)
     select value).ToList();

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

您可以在一条语句中完成,但需要助手方法的帮助

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;
}
注意:实际上,您可以不使用helper方法:

long value;
var TestList =
    (from string s in TheString.Split(',')
     where long.TryParse(s, out value)
     select value).ToList();


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

好的,谢谢您的建议。无论如何,要使它适合linq语法的单行程序?我只是觉得它读起来更好,但结果当然更重要。@frenchie你可以删除所有的换行符。顺便说一句,把“long number;”行放在循环内部或外部有什么区别吗?@frenchie:是的,它改变了变量的范围。在我看来,你应该尽量使用最小的范围。好的,谢谢你的建议。无论如何,要使它适合linq语法的单行程序?我只是觉得它读起来更好,但结果当然更重要。@frenchie你可以删除所有的换行符。顺便说一句,把“long number;”行放在循环内部或外部有什么区别吗?@frenchie:是的,它改变了变量的范围。在我看来,您应该始终尽可能使用最小的作用域。如果有一个数字无法成功解析为long,您希望发生什么?我想了解它并将布尔值设置为false;我正在清理来自客户端的数据。如果有一个数字无法成功解析为long,您希望如何处理?我想了解它并将布尔值设置为false;我正在清理来自客户端的数据。+1我喜欢这种方法,但它不能完全解决OP的问题(如果你看到关于将布尔值设置为false的评论)@ReedCopsey:是的,我非常喜欢一行简单的解决方案,但我刚刚意识到,对于这种方法,foreach效果更好。+1我喜欢这种方法,但这并不能完全解决OP的问题(如果你看到关于将布尔值设置为false的评论)@ReedCopsey:是的,我非常喜欢一行简单的解决方案,但我只是意识到,对于这一个,foreach工作得更好。