代码如下所示:
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
我应该如何解决这个问题以及这里有什么好的做法?
假设你有一个人类:
public class Person
{
public string Name { get; set;}
public IEnumerable<Role> Roles {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
我显然应该在构造函数中实例化角色.现在,我曾经使用像这样的List:
public Person()
{
Roles = new List<Role>();
}
Run Code Online (Sandbox Code Playgroud)
但我在System.Linq命名空间中发现了这种静态方法
IEnumerable<T> Enumerable.Empty<T>();
Run Code Online (Sandbox Code Playgroud)
来自MSDN:
该
Empty(TResult)()方法缓存一个空的序列TResult.当它返回的对象被枚举时,它不会产生任何元素.在某些情况下,此方法对于将空序列传递给用户定义的方法非常有用
IEnumerable(T).它还可以用于为诸如的方法生成中性元素Union.有关此用法的示例,请参阅示例部分
那么编写这样的构造函数会更好吗?你用它吗?为什么?如果没有,为什么不呢?
public Person()
{
Roles = Enumerable.Empty<Role>();
}
Run Code Online (Sandbox Code Playgroud) 我试图了解IQueryable,ICollection,IList和IDictionary接口之间的区别,这对于迭代,索引,查询等基本操作来说更快.
像Collection,List,Dictionary等类这样的类可以很好地启动这些接口,什么时候应该使用这些类.使用这些类比其他类的基本优势.
我尝试阅读其他类似问题的帖子,但没有回答我的完整问题.谢谢您的帮助.
我需要设计自己的自定义GenericCollection类.现在我有很多选择使用以获得它IEnumerable,ICollection和IList,在后来提供了一些附加功能.
我很困惑,如果我和我一起去,IEnumerable<T>我可能需要声明对象实际上像这种情况一样持有集合_list.
public class GenericCollection<T> : IEnumerable<T>
{
private List<T> _list;
//...
}
Run Code Online (Sandbox Code Playgroud)
但是如果我使用ICollection<T>或者IList<T>,我不需要声明List对象,因为它是隐式可用的.
public class GenericCollection<T> : IList<T>
{
// no need for List object
//private List<T> _list;
//...
}
Run Code Online (Sandbox Code Playgroud)
这两种方法在性能方面有何不同?
在哪种情况下,每个人都是首选,特别是在设计自己的集合时.我对轻量级收藏感兴趣,性能良好.我认为这可以通过使用,IEnumerable<T>但是如何与一些强有力的理由一起使用呢?
我已经审查了一些现有的帖子,但没有提供所需的信息.
任何人都可以详细说明 IList 和 ICollection。而且,我们何时何地使用 IList 或 ICollection
c# ×5
.net ×2
collections ×2
list ×2
arraylist ×1
arrays ×1
constructor ×1
icollection ×1
ienumerable ×1
ilist ×1
linq ×1
performance ×1