确定将内部List <T>作为IEnumerable <T>或ICollection <T>返回?

RJP*_*RJP 5 c# collections return return-type

可能重复:
集合<T>与列表<T>您应该在接口上使用什么?

考虑这个方法 - 返回的变量myVar是a List<T>,但方法的返回类型MyMethod()IEnumerable<T>:

public IEnumerable<T> MyMethod(string stuff)
{
     var myVar = new List<T>();
     //do stuff

     return myVar;
}
Run Code Online (Sandbox Code Playgroud)

基本上,我想知道的是,如果返回myVar另一种类型是好的.

具体来说,就我的情况而言,'do stuff'通过a DataRow并将其中的项目分配给DataRow对象列表.我在其他地方也有类似的情况ICollectionIList返回类型.

我想要返回的原因IEnumerable或是ICollection因为我没有返回超过需要.但与此同时,这允许调用者将返回值转换为a,List如果需要这样做的话.

但是,我的return语句返回a List而不是方法的返回类型似乎很奇怪.这是正常做法吗?这样做有什么不对吗?

澄清(回应重复评论):

只是为了澄清,我很好奇的是,如果它是好的,在我的身体return语句返回一个List<T>,但这种方法管器具有返回类型的IEnumerable,或可能ICollection,Collection等...的东西不同比高于机构退货声明.

Tho*_*que 6

它不仅没有任何问题,而且它实际上是一种很好的做法:只暴露出绝对必要的东西.这样,调用者不能依赖于该方法将返回a的事实List<T>,因此如果由于某种原因您需要更改实现以返回其他内容,则不会违反合同.但是,如果调用代码(错误地)对方法实际返回的内容做出假设,则调用代码可能会中断.