为什么Dbset在已经实现IQueryable时实现IEnumerable?

问题描述 投票:0回答:2

当它已经具有IQueryable时,Dbset似乎实现了IEnumerable,这不会使IEnum的实现冗余,因为IQueryable已经实现了IEnum。

c# ienumerable iqueryable dbset
2个回答
1
投票

首先,我们应该纠正你的术语:

IQueryable已经实现了IEnum。

IQueryable没有实施任何东西。它继承了IEnum,这意味着每个实现IQueryable的类都必须实现IEnum的成员以及IQueryable的成员。

我认为你的问题实际上是这样的:为什么DbSet定义为实现IEnum,当它实现IQueryable所以它必须实现IEnum无论如何。

从技术上讲,说DbSet实施IEnum是多余的。

这留下了一个问题,为什么有人会不必要地说出一个基本接口?

我引用Eric Lippert撰写的这篇博客文章:https://blogs.msdn.microsoft.com/ericlippert/2011/04/04/so-many-interfaces/

也许是因为他们相信这样做会使代码更容易理解,更自我记录。

或者,也许开发人员将代码编写为

接口I1 {}

接口I2 {}

接口I3:I1,I2 {}

并且实现了,哦,等一下,I2应该继承I1。为什么要进行编辑然后要求开发人员返回并更改I3的声明而不包含I1的明确提及?我认为没有理由强迫开发人员删除冗余信息。


0
投票

有时您需要特定表的所有行,而不需要任何额外的where子句,采用IEnumerable格式。在这种情况下,你可以直接将DbSet施放到IEnumerable

© www.soinside.com 2019 - 2024. All rights reserved.