希望标题有意义。
我是按照以下格式保存为单个字符串的逗号分隔整数列表创建报告:
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()));
}
是否只是在将字符串添加到模型类中之前将字符串解析为整数列表,或者是否有一种不太常见的方法呢?
答案 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>()