ang*_*son 22
我的指导方针一直是最具体的,而且最常见.
数据类型越一般,使用它的代码就越少了解数据类型.例如,如果方法返回一个集合,我将返回该方法生成的新创建的集合.如果它返回一个内部数据结构,我会碰到它IEnumerable<T>
.
但是,如果它返回一个数组,或者List<T>
因为它是内部构建的数组,那么获取数据的代码现在可以访问集合中的更多功能.
返回最一般(在限制范围内)数据类型的频谱的另一端意味着您总是返回IEnumerable<T>
或类似于所有集合,即使该方法在内部构建了一个新数组并返回该数组.调用代码现在必须手动将集合的内容复制到新的数组或列表中,如果这是调用代码需要使用的话.
这意味着更多,在大多数情况下,这是不必要的工作.
至于输入,我选择最常用的类型,所以对于集合,除非我特别需要数组或列表或类似,我会接受IEnumerable<T>
.通过这样做,我确保调用代码的工作量较少.这可能意味着我必须在内部做一些工作,所以这是一个权衡.
重要的是要达到平衡.每次都不要太笼统或太具体.找出合理的类型,并考虑调用代码必须做什么才能传入数据或接受代码中的传出数据.工作越少越好.