Aar*_*ide 0 c# intellisense extension-methods visual-studio
使用EF时,ObjectContext我会看到两种不同的扩展方法,其签名与连续选择相同.对我来说没有任何意义,根据我选择的那个,会有一些魔法导致一个或另一个被调用,那么实际发生了什么?

我假设那Campaigns是一个实例DbSet<Campaign>?DbSetinherits DbQuery,实现IOrderedQueryable,其定义是:
public interface IOrderedQueryable<out T> : IQueryable<T>,
IEnumerable<T>, IOrderedQueryable, IQueryable, IEnumerable
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,IQueryable<T>并IEnumerable<T>得到实施,但定义IQueryable表明,它扩展IEnumerable:
public interface IQueryable : IEnumerable
所以基本上,扩展方法是为了实现的IEnumerable,但它也可以从IQueryable扩展原始接口时获得.Intellisense正在挑选这两个选项,因为你最终可能会隐式或明确地将类型转换为IEnumerable.
实际运行的方法取决于调用它的类型.例如,在您的方法Campaigns实例DbSet<Campaign>上将它(如果您正在使用MS SQL)转换为SELECT TOP 1...查询,但如果您正在调用它Campaigns.ToList(),也就是说IEnumerable,它将返回零索引处的项目.每种类型的扩展方法的实现都不同.
希望有道理:)
| 归档时间: |
|
| 查看次数: |
282 次 |
| 最近记录: |