繁体   English   中英

为什么使用IList而不是IEnumerable?

[英]Why use IList over IEnumerable?

1)我读了一些(通用)代码片段,看到了一些使用IList<T>地方,有些使用了IEnumerable 使用第一个优于后者的优点是什么?

2) isas在c#。 我的理解is没有类型检查,并as它铸造。 但到底是什么? 强制数据到某个大小的对象? isas有什么不同?

IList[<T>]表示以下内容:

  • 可以迭代
  • 是有限的,已知的大小
  • 是可重复的
  • 可以通过索引随机访问
  • 可以(可选地,可检查)编辑:重新分配值,添加,删除等

另一方面, IEnumerable只能被迭代。 并非所有可以迭代的东西都是列表。 例如:

static IEnumerable<int> Get() {
    Random rand = new Random();
    while(true) yield return rand.Next();
}

^^^是一个无限的序列。 它没有长度,不能变异,不能通过索引访问...但是,它可以迭代:

foreach(int i in Get().Take(200)) {
    Console.WriteLine(i);
}

is执行一个返回类型检查true / false ......即 objIList 是还是不是。

as执行“尽量要做到这一点”式的检查; 如果失败则返回null如果成功则返回类型引用(etc)。 基本上,这是一个效率的事情:

if(obj is IList) {
    var list = (IList) obj;
    ...
}

效率低于:

var list = obj as IList;
if(list != null) {
    ...
}

如果obj为null,它们的行为也会不同; is抛出异常; as返回null

  1. IList提供IEnumerable没有的某些方法。 最重要的是,添加它的能力(更多信息,请查看msdn
  2. is比较类型,如果某个对象可以转换为类型,则返回。 as实际执行的是演员阵容,返回null ,如果它失败了。 无论出于何种原因,转换意味着将类型A的对象转换为类型B的对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM