我有一个List<T>
类型的私人成员,其中T
是丰富的域对象。我的应用程序中的域包含许多方法,期望T
。通过IList公开一个List <域对象><interface>
我想只公开IList<IT>
类型的公共属性,其中T : IT
。 IT
由DTO实现的小占用空间。
由于我不能投List<T>
到IList<IT>
我在财产声明中使用List<T>.ConvertAll
。
这是否有更好的方法来做到这一点?更快,更优雅?
编辑,以提供额外的细节
的T
是一个基类,为其存在多个派生类的,并且每个这些派生类的有多种不同的口味(在运行时加载的配置)。表示层中的用户可以添加/更改/删除任何配置的这些派生类的任何实例。这些实例也可以由用户定向链接,但是有一些复杂的规则可以管理哪些链接是允许的;一些在编译时已知,一些仅在运行时才知道(基于配置)。有些情况可能是双向链接的,有些是交叉链接的,有些只有一个方向是单一的,有些只有一个方向,有些则根本不存在。
为此,T
包含任何此类链接的有效目标列表。表示层以图形方式突出显示这些有效目标,并且如果目标不在有效列表中,则不允许链接。当新创建,更改或删除任何实例时,需要重新评估每个实例的ValidTargets列表并可能更改。
工厂和服务类期望在其上运行的T
类上有很多其他成员和方法。有些行为与上面的例子非常相似。这些都不应该暴露在组件之外。
它需要是可变的吗? – SLaks
Stefan也在@SLaks暗示。这取决于您期望客户实际使用该列表的内容。他们是否允许添加或删除它?它是由多个客户共享的吗?它本身是否代表一个领域概念(例如命令,查询,...)?等等。这取决于你的用例。 – Alex
如果您的列表*为*只读,您可以使用IReadOnlyList。 –
zmbq