相关疑难解决方法(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与IQueryable的业务逻辑或DAL返回类型

我知道之前已经问过这些问题,我将首先列出其中一些问题(我到目前为止已经阅读过的):

正如你所看到的那样,关于这个主题的SO本身有一些很好的资源,但是有一个问题/部分的问题,我仍然不确定是否已经阅读了这些内容.

我主要关注IEnumerable和IQueryable问题,更具体地说是DAL与它的消费者之间的耦合.

我发现有关两个接口的建议各不相同,这两个接口都很棒.但是,我关注的是DAL返回IQueryable的含义.据我了解,IQueryable建议/暗示有一个Linq提供商.这是第一个问题 - 如果DAL突然需要来自非Linq提供的数据源,该怎么办?以下方法可行,但它更像是黑客攻击吗?

public static IQueryable<Product> GetAll()
{
    // this function used to use a L2S context or similar to return data 
    // from a database, however, now it uses a non linq provider

    // simulate the non linq provider...
    List<Product> results = new …
Run Code Online (Sandbox Code Playgroud)

c# data-access-layer .net-4.0 visual-studio-2010

24
推荐指数
1
解决办法
4214
查看次数

Resharper建议参数可以是'BaseType'类型

在方法参数中使用基类型有什么好处?

这是一个样本:


private void Foo(List<int> numbers) //R# laments: parameter can be IEnumerable. 
{
    foreach (var i in numbers) {
        Console.WriteLine(i);
    }
}
Run Code Online (Sandbox Code Playgroud)



这是另一个


public class Foo : ICloneable
{
    public object Clone()
    {
        return MemberwiseClone();
    }

    public Foo CopyMe(Foo other) //R# laments: parameter can be ICloneable
    { 
        return (Foo)other.Clone();
    }
}
Run Code Online (Sandbox Code Playgroud)

...我们可以在哪里更改类型,但Foo在运行时会失败.



所以问题是:当R#建议参数可以是'X'时,我该怎么办?




PS.只是Whysharper的另一个解释- 一个与Resharper和StackOverflow相吻合的插件.人们说这很好,但缺乏很好的解释 - 希望我们能在一起做得更好;).

c# resharper

21
推荐指数
2
解决办法
3520
查看次数

LINQ:根据重量/大小将列表拆分为组

我有很多使用LINQ的例子,如何根据每个列表中的最大项将列表划分为子列表.但在这种情况下,我有兴趣使用sizemb作为权重来跳转子列表 - 每个列表的最大总文件大小为9mb.

    public class doc
    {
        public string file;
        public int sizemb;
    }

    var list = new List<doc>()
    {
         new doc { file = "dok1", sizemb = 5 },
         new doc { file = "dok2", sizemb = 5 },
         new doc { file = "dok3", sizemb = 5 },
         new doc { file = "dok4", sizemb = 4 },
    };

    int maxTotalFileSize = 9;
Run Code Online (Sandbox Code Playgroud)

然后,上面的清单应分为3个清单.如果任何"文件"超过9mb,则应该在他们自己的列表中.

我在这里做了一个非LINQ版本:

        var lists = new List<List<doc>>();
        foreach (var item in list)
        {
            //Try and …
Run Code Online (Sandbox Code Playgroud)

c# linq

6
推荐指数
1
解决办法
1123
查看次数

IEnumerable <T>作为返回值,延迟执行和N层应用程序

首先,我不认为这个问题是这些问题的重复:

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

众所周知,引入几层的主要目的是减少耦合.
我们必须为数据访问定义一些接口,我们的BL不应该关心DAL实现的细节.如果提到接口返回IEnumerable<T>BL不知道它只是一个静态IEnumerable还是延迟执行的东西.同时,该特定细节可以显着影响性能并且根据实施方式需要不同的编码.
好吧,在我们要多次迭代收集的情况下,可以调用.ToList()每个IEnumerable.但是由于不必要的新列表实例化,这降低了静态集合的性能.

所以我试图了解哪种方法更好.
更具普遍性,可能性能更差,性能更高,性能更高.我想,没有银弹,但它可能是我错过的其他方法.

c# ienumerable ilist n-tier-architecture

5
推荐指数
2
解决办法
600
查看次数

何时返回 IEnumerable&lt;T&gt;

我应该IEnumerable<T>只在懒惰评估的情况下从方法和属性返回吗?

你有任何人的模式,当你返回IEnumerableICollectionIList

.net c# collections ienumerable

4
推荐指数
1
解决办法
627
查看次数