关于 LINQ 查询语法...
var foo = new List<int> { 1, 2 };
var boo = from n in foo
where n > 1
select n;
...我一直认为这种语法仅限于在 IEnumerable 上操作。或者至少在我了解 IQueryable 之前。也许还有 IObservable。但我最近注意到一个建议,即查询语法基于鸭子类型。在我找到一个专门用于LINQ to Tasks的站点之前,那个故事看起来并不十分令人信服。LINQ to Tasks 看起来完全依赖于带有查询语法的鸭子类型!
好的,这是怎么回事?查询语法是否使用鸭子类型?当我自己试一试时,果然这行得通,而且似乎证明了这一切都是关于鸭子类型的,而不是 IEnumerable:
public class Joker<T>
{
public T Item;
public Joker(T item)
{
Item = item;
}
}
public static class JokerHelp
{
public static T2 Select<T,T2>(this Joker<T> joke, Func<T,T2> call)
{
return call(joke.Item);
}
}
var oof = new Joker<int>(5);
int foo = from a in oof
select a;
如果鸭子类型是查询语法的工作方式,显然是这种情况,那么官方(MSDN)文档可能在哪里?或者任何合理的文件?