Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 返回ICollection的真正优势是什么<;T>;而不是列表<;T>;?_C#_.net_Ienumerable_Icollection - Fatal编程技术网

C# 返回ICollection的真正优势是什么<;T>;而不是列表<;T>;?

C# 返回ICollection的真正优势是什么<;T>;而不是列表<;T>;?,c#,.net,ienumerable,icollection,C#,.net,Ienumerable,Icollection,我读过几篇博客文章,提到对于公共API,我们应该始终返回ICollection(或IEnumerable),而不是List。返回ICollection而不是列表的真正优势是什么 谢谢 重复:当您在枚举器上迭代时,枚举器一次只返回一个实体。这是因为它使用了收益率回报率。另一方面,集合返回整个列表,要求将该列表完全存储在内存中 简单的回答是,枚举数更轻、效率更高。ICollection只是一个接口,而List是该接口的具体实现。如果您以后想使用列表之外的其他容器呢?如果公开公开ICollection

我读过几篇博客文章,提到对于公共API,我们应该始终返回ICollection(或IEnumerable),而不是List。返回ICollection而不是列表的真正优势是什么

谢谢


重复:

当您在枚举器上迭代时,枚举器一次只返回一个实体。这是因为它使用了收益率回报率。另一方面,集合返回整个列表,要求将该列表完全存储在内存中


简单的回答是,枚举数更轻、效率更高。

ICollection只是一个接口,而List是该接口的具体实现。如果您以后想使用列表之外的其他容器呢?如果公开公开ICollection接口,以后可以将内部容器更改为其他容器—只要新容器也实现ICollection接口。

它在选择基础数据结构时给予您更多自由

列表假设实现支持索引,但ICollection不做这样的假设

这意味着,如果您发现一个集合可能会提供更好的性能,因为排序是不相关的,那么您可以在不影响客户机的情况下自由地更改方法


这是基本的封装。

我认为IList更合适,但是…

看到了吗?!我想他指的是如何设置返回类型,而不是要返回的实际对象。这是一个类接口契约的问题。他问的是返回枚举数相对于列表的优势是什么,而不是如何返回。回答如下: