相关疑难解决方法(0)

集合<T>与List <T>您应该在接口上使用什么?

代码如下所示:

namespace Test
{
    public interface IMyClass
    {
        List<IMyClass> GetList();
    }

    public class MyClass : IMyClass
    {
        public List<IMyClass> GetList()
        {
            return new List<IMyClass>();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

当我运行代码分析时,我得到以下建议.

警告3 CA1002:Microsoft.Design:更改'IMyClass.GetList()'中的'List'以使用Collection,ReadOnlyCollection或KeyedCollection

我应该如何解决这个问题以及这里有什么好的做法?

.net c# collections code-analysis

152
推荐指数
3
解决办法
8万
查看次数

我应该总是返回IEnumerable <T>而不是IList <T>吗?

当我正在编写我的DAL或其他返回一组项目的代码时,我是否应该总是返回语句:

public IEnumerable<FooBar> GetRecentItems()
Run Code Online (Sandbox Code Playgroud)

要么

public IList<FooBar> GetRecentItems()
Run Code Online (Sandbox Code Playgroud)

目前,在我的代码中,我一直试图尽可能地使用IEnumerable,但我不确定这是否是最佳实践?这似乎是正确的,因为我返回了最通用的数据类型,同时仍然描述它的作用,但也许这是不正确的.

c# ienumerable

94
推荐指数
7
解决办法
4万
查看次数

IEnumerable和Array,IList和List之间有什么区别?

IEnumerable和之间有什么区别Array

IList和之间有什么区别List

这些似乎具有相同的功能.

c#

87
推荐指数
4
解决办法
5万
查看次数

List,IList,IEnumerable,IQueryable,ICollection,哪个是最灵活的返回类型?

我之前在这里发过这个问题但是我不满意我理解完整的后果.问题是返回类型应该是使用linq-to-sql的数据层返回以获得最大的灵活性和查询能力.这是我读过/发现的内容:

  1. IEnumerable是有限的,只允许读取转发操作.IEnumerable是最通用的.我发现IEnumerable确实允许查询操作与扩展语法.

  2. 由于插入操作,List允许最大的灵活性.

  3. 应使用集合而不是列表来启用只读集合.

  4. 永远不应该使用IQueryable,它应该"使用和关闭".IQueryable不返回列表,但为数据库生成查询语法.

我觉得我对折衷有更好的感觉,但仍然不确定一些事情:

  1. 为什么我会选择具体类型的界面变体?即IList或ICollection与列表或集合.我会得到什么好处?

  2. 我看到扩展操作有效,但扩展的查询语法也能正常工作吗?

  3. 有人建议我之前使用AsQueryable().但是,如果我没有连接到数据库,为什么我会这样做呢?似乎扩展方法无论如何都有效.

.net architecture collections linq-to-sql

48
推荐指数
2
解决办法
2万
查看次数

我应该返回IEnumerable还是IList?

我希望从方法中返回一个有序的项目列表.我的返回类型应该是IEnumerable还是IList?

c# collections ienumerable

38
推荐指数
4
解决办法
8027
查看次数

IEnumerable <T>作为返回类型

使用IEnumerable<T>返回类型有问题吗?FxCop抱怨返回List<T>(它建议返回Collection<T>).

好吧,我一直受到一条规则的指导:"尽可能接受,但要回报最大值".

从这个角度来看,返回IEnumerable<T>是一件坏事,但是当我想使用"懒惰检索"时我该怎么办?此外,yield关键字是如此的好.

c# collections ienumerable enumeration

28
推荐指数
3
解决办法
2万
查看次数