【发布时间】:2016-07-20 02:25:03
【问题描述】:
考虑以下几点:
int _bonusTriggerCountSetting = 5;
int [][] result = new int[][]
{
new int[] {1,2,3},
new int[] {4,5,6},
new int[] {7,8,9}
};
var bonusList = Enumerable.Range (0, _symbolList.Count)
.Where (i => _symbolList [i].Type == SymbolType.Bonus);
foreach (var bonus in bonusList) {
var query = from int item in result
where item == bonus
select item;
if (query.Count () >= _bonusTriggerCountSetting) { // query.Count () gives the error below
_result.Type |= ResultType.Bonus;// bitwise enum
break;
}
}
运行时错误:
InvalidCastException:无法从源类型转换为目标类型。
让我感到困惑的是,bonusList 和 query 都是 IEnumerable<int>,但是 query 给出了错误但没有 bonusList。我已经尝试为两者都做一个 foreach 并且结果仍然存在,即 bonusList 工作正常但查询没有。
还有一种方法可以一步而不是 2 步进行查询吗?
该代码应该将 result 与 bonusList 进行比较,以查看 result 是否超过了 bonusList 中“奖金”类型符号的 _bonusTriggerCountSetting 数量。
【问题讨论】:
-
什么是
_bonusTriggerCountSetting定义在哪里 -
我知道我忘记了什么。谢谢,我已经更新了帖子
-
详细说明您的错误。你说错误在“_result.Type |= ResultType.Bonus;”但没有详细说明
-
@MichaelMao 我没有,它上面的行给出了错误。但是,我已经将它更新为更具体地说它的 query.Count() 给出了错误。我也确实在代码sn-p下面的段落中解释了它。
-
你的_result.Result是什么?给出一个能真正运行并抛出异常的代码
标签: c# linq ienumerable