这是我的代码,直到某一点:
var Data = File.ReadAllLines(FilePath).Select(line => line.Split('\t')).ToArray();
int caseSwitch = 0;
if (radioButton1.Checked == true)
{
caseSwitch = 1;
}
else if (radioButton2.Checked == true)
{
caseSwitch = 2;
}
else if (radioButton3.Checked == true)
{
caseSwitch = 3;
}
var query = from x in Data
let sw = caseSwitch
select
sw == 1 ? new { Name = x[6], Age = x[2], Date = x[4], Score = x[7] }
: sw == 2 ? new { Name = x[9], Age = x[1], Date = x[0], Score = x[3] }
: sw == 3 ? new { Name = x[5], Age = x[8], Date = x[2], Score = x[1] }
: null;
当我有多达8个案例切换场景时,代码似乎停止工作......一旦我有8个场景,我似乎得到的错误是“索引超出了数组的范围”,而“:null;”声明以黄色突出显示。我做错了什么?
答案 0 :(得分:2)
“索引超出了数组的范围”表示在一个(或多个)情况下,x
的索引值不正确 - switch语句的数量不会导致该错误。< / p>
在您的选择中发布导致错误的行。
答案 1 :(得分:1)
更好的方法是让查询执行除select选项之外的所有操作。然后你可以像这样进行切换:
IQueryable<whatever> newQuery;
switch (caseSwitch)
{
case 1: newQuery = query.Select(i => new { Name = i[9], ... }); break;
case 2: newQuery = query.Select(i => new { Name = i[6], ... }); break;
}
请注意,您不能使用匿名类型,但这不应该是一个问题。这样,您只需发送实际需要的查询,而不是在服务器上执行大小写。
答案 2 :(得分:1)
你根本不需要条件语句 - 因为你的查询结构没有改变,你只需要一个提供Name
,Age
,{{1}索引的表。 }和Date
列:
Score