我有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
错误:
找不到源类型&#39;CellDiff
&#39;的查询模式的实现。 &#39;Where
&#39;没找到。
我也试过diffs.AsQueryable()
,但无济于事。
我在IEnumerable<T>
上执行LINQ查询通常没有问题。我有点迷失在这里发生的事情。
答案 0 :(得分:3)
在LINQ查询语法中指定类型会使用该类型参数创建对Cast
扩展方法的调用。
您是否在某处定义了自己的Cast
?
答案 1 :(得分:1)
你需要更改查询,更新一个就像这样
var change = from diff in diffs //changed like removed "CellDiff" from this
where diff.RefX == cellX && diff.RefY == cellY
select diff;
在查询之后不需要CellDiff