请考虑以下事项:
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和查询都是IEnumerable<int>
但是查询给出了错误但没有给出奖励列表。我已经尝试为两者做一个foreach并且结果仍然存在,即bonusList工作正常但查询没有。
还有一种方法可以一步查询,而不是2吗?
该代码应该将结果与bonusList进行比较,以查看结果是否在bonusList中保存了超过_bonusTriggerCountSetting
个“奖励”类型符号的数字。
答案 0 :(得分:0)
result
是int[]
的数组。但是稍后在您的查询中,您声明它保留int
。
var query = from int item in result
where item == bonus
select item;
相当于:
var query = result.Cast<int>().Where(item => item == bonus);
显然不是错误。
据我了解,您只是想确定某个列表是否至少包含_bonusTriggerCountSetting
类型的SymbolType.Bonus
符号。你可以这样做:
var count = _symbolList.Count(s => s.Type == SymbolType.Bonus);
var result = count >= _bonusTriggerCountSetting;
答案 1 :(得分:0)
result
是一个类型为int
的锯齿状数组,这意味着linq表达式中的item
是一个int数组( not int
) ,将其转换为int将导致无效的强制转换异常。
不确定完全你的用例是什么,如果你正在寻找嵌套数组中的任何匹配元素,你可以这样做。
foreach (var bonus in bonusList) {
var query = from items in result
where items.Any(x=>x == bonus) // To verify at least there is one matching element.
select items;
// otehr logic
}