1

我有一个IEnumerable<T>方法的参数,其中T是结构类型:

using System;
using System.Collections.Generic;
using System.Linq;
using ...

public static class Foo
{
    internal struct CellDiff
    {
        public int RefX;
        public int RefY;
        public object OldValue;
        public object NewValue;
    }

    private static void ItemChanged(IEnumerable<CellDiff> diffs, int cellX, int cellY)
    {
        var change = from CellDiff diff in diffs
                     where diff.RefX == cellX && diff.RefY == cellY
                     select diff;

        ...
    }
}

这会导致以下错误:

(范围)IEnumerable<CellDiff> diffs

错误:
找不到源类型“ CellDiff”的查询模式的实现。' Where' 未找到。

我也试过做diffs.AsQueryable(),无济于事。

我通常在IEnumerable<T>. 我对这里发生的事情有点迷茫。

4

2 回答 2

3

在 LINQ 查询语法中指定类型会Cast使用该类型参数创建对扩展方法的调用。

你有自己Cast定义的地方吗?

于 2012-10-24T08:44:05.037 回答
1

您需要更改查询,更新的查询是这样的

 var change = from diff in diffs //changed like removed "CellDiff" from this
                     where diff.RefX == cellX && diff.RefY == cellY
                     select diff;

在你的查询中不需要CellDiff after from

于 2012-10-24T08:34:49.977 回答