IEnumerable<T> InvalidCastException



考虑以下内容:

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工作正常,但查询不正常。

还有没有一种方法可以在一步而不是两步中查询?该代码应该将结果与bonusList进行比较,以查看结果是否在bonusList中包含超过_bonusTriggerCountSetting个"奖金"类型的符号。

resultint[]的数组。但稍后在查询中,您声明它包含int

var query = from int item in result
            where item == bonus
            select item;

相当于:

var query = result.Cast<int>().Where(item => item == bonus);

这显然不是错误。

据我所知,您只是想确定某个列表是否至少包含SymbolType.Bonus类型的_bonusTriggerCountSetting符号。你可以简单地做:

var count = _symbolList.Count(s => s.Type == SymbolType.Bonus);
var result = count >= _bonusTriggerCountSetting;

resultint类型的锯齿状数组,这意味着linq表达式中的item是int数组(而不是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
    }

相关内容

  • 没有找到相关文章

最新更新