如何将此数字字符串列表添加到整数类列表中?

时间:2015-11-03 11:34:33

标签: c# arrays string parsing model-view-controller

希望标题有意义。

我是按照以下格式保存为单个字符串的逗号分隔整数列表创建报告:

2, 3, 5

我将这些字符串数组拆分成一个字符串数字数组,现在想将它们添加到包含Int32值的模型中,这样我就可以对另一个类中保存的数据进行比较。

private class multiValues
{
    private Int32 val { get; set; }
}
private class setMultiValues  : List<multiValues>
{
}

我希望可以使用简单的for循环完成,但我无法将字符串解析为类的int。

String[] test = answers.First().multi_choice.Split(',');
List<setMultiValues> multis = new List<setMultiValues>();

for (var i = 0; i <= test.Length; i++)
{
    multis.Add(Int32.Parse(test[i].ToString()));
}

是否只是在将字符串添加到模型类中之前将字符串解析为整数列表,或者是否有一种不太常见的方法呢?

4 个答案:

答案 0 :(得分:2)

LINQ让这更容易:

var numbers = answers.First().multi_choice.Split(',').Select(x => Int32.Parse(x)).ToList()

然后您可以将列表添加到模型中。

更新:

LINQ中的

Select与SQL中的SELECT或函数式语言中的map非常相似。它需要一个项目列表和一个依次应用于每个项目的功能。在您的情况下,您有一个字符串列表和一个解析函数,它接受一个字符串并返回一个整数(或失败!)。

当操作是无副作用时,LINQ是在C#中操作数据的首选方法。它更紧凑,不依赖于集合的实现细节。

答案 1 :(得分:1)

我怎么知道 - 没有办法减少hacky,但你可以通过LINQ简化它

我认为它应该是这样的:

var test = answers.First().multi_choice.Split(',').Select(x => int.Parse(x)).ToArray();
List<setMultiValues> multis = new List<setMultiValues>();

multis.AddRange(test);

答案 2 :(得分:1)

你正在做所有正确的事情,但只是让它们过于复杂

您根本不需要多个值

String[] test = answers.First().multi_choice.Split(',');
List<int> multis = new List<int>();

foreach (var s in test )
{
    multis.Add(int.Parse(s);
}

或简化

var multis = from s in answers.First().multi_choice.Split(',')
select int.Parse(s);

甚至

var multis = from a in answers
             select new {Answer=a,Values= from s in a.multi_choice.Split(',')
                                          select int.Parse(s)
                        };

这将创建一个未命名的类型,它是一个答案和所有int值的列表

答案 3 :(得分:1)

你可以这样做:

List<setMultiValues> result = answers.First().multi_choice.Split(',').Select(x => Int32.Parse(x)).ToList<setMultiValues>()