从“1,2,3”解析int []

时间:2011-05-26 12:21:03

标签: c# .net asp.net arrays

我有一个名为ID的多选下拉列表,提交ID = 1,2,3,我需要将其解析为整数数组,以便在过滤器方法中执行Contains()。目前我使用:

string[] ids = Request["ID"].Split(',');

我真的不喜欢,因为比较字符串比较慢。有什么建议吗?

5 个答案:

答案 0 :(得分:13)

Request["ID"].Split(',').Select(x=>int.Parse(x)).ToArray();

当然,如果任何结果数字字符串不是“可解析的”(这样的单词是否存在?),这将抛出。

答案 1 :(得分:2)

这取决于如果转换为int更快或字符串比较更快,您将在数组中查找的次数。

HashSet<int> ids = new HashSet<int>(from s in Request["ID"].Split(',')
                                    select int.Parse(s));

但如果你有很多id:s可能是最快的,那就是创建一个HashSet<string>

HashSet<string> = new HashSet<string>(string[] ids = Request["ID"].Split(','));

答案 2 :(得分:2)

int[] ids = Request["ID"].Split(',').Select(Convert.ToInt32).ToArray();

答案 3 :(得分:1)

首先:

string[] arr = Request["ID"].Split(',')

然后:

Array.ConvertAll(arr, s => Int32.Parse(s));
Array.ConvertAll(arr, Int32.Parse);

arr.Select(s => Int32.Parse(s));
arr.Select(Int32.Parse);

然后:

new HashSet<int>(result);

(执行Contains()的最快容器)

另见:

答案 4 :(得分:0)

如果你没有linq,你可以:

string[] ids = Request["ID"].Split(',');
int[] items = new int[ids.Length];
for(int i = 0; i<ids.Length; i++)
{
  items[i] = int.Parse(ids[i]);
}
相关问题