繁体   English   中英

返回一个IEnumerable <T> 或清单 <T> 从图书馆

[英]Return an IEnumerable<T> or List<T> from library

我正在设计一个连接到数据源(类似于DB)并返回各种POCO对象的库。

我正在使用数据源供应商.NET库进行连接(并检索对象),然后将其转换为轻得多的POCO对象。 为了构建这些POCO对象,我对每个POCO类( .FromDBObject(DBObject obj)都有一个静态方法,该方法接受DB对象并返回一个新的POCO实例。

到数据库的初始连接不是很快,所以不是我想即时执行的操作(每个POCO构建),因此我在其周围包装了一个库,用于管理连接以限制此速度并进行处理正确连接。

作为该库的一部分,我有许多方法可以返回POCO的列表。 数据库对象的一个​​“怪癖”是,当供应商库加载它们时,它们没有被加载到内存中,它们需要一个开放的连接来加载数据。

结果,如果我返回IEnumerable<POCO>则有可能在枚举连接之前关闭连接(时间/处置),从而在创建POCO时崩溃。

因此,为简短的问题准备了很长时间。

  1. 我应该返回IEnumerable<POCO>但是在实际方法中执行.ToList()来强制实例化,还是应该将返回类型指定为List<POCO>

您的方法返回类型应该与数据访问无关。 确定要先返回IEnumerable还是List 如果IEnumerable足够,则使用ToList()

如果您需要List提供的额外方法,则返回List会很好,因为它会执行隐式的ToList()调用,尽管无论如何我都会明确地调用ToList()只是为了清楚地表明您想要从该数据库中加载数据点在代码中。

如前所述,您必须已经对查询进行了迫切的评估。 渴望评估有两种选择。1. ToList()2. ToArray()

返回IList的利弊

如果使用者经常需要IList格式的数据,那么您将节省一个额外的枚举(因为返回的是query.ToList()而不是query.ToArray()..如果订户需要列表,则他们需要有效地调用query.ToArray ().ToList(),导致两次枚举)。 缺点是将返回类型从ILIST更改为IEnumerable会很麻烦。

就个人而言,我会选择IEnumerable,因为它所做的假设更少。 我假设如果您确实需要IList方法,则可以添加一个特殊的ListFromDBObject(DBOject obj)方法

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM