[英]Why use IList over IEnumerable?
1)我读了一些(通用)代码片段,看到了一些使用IList<T>
地方,有些使用了IEnumerable
。 使用第一个优于后者的优点是什么?
2) is
与as
在c#。 我的理解is
没有类型检查,并as
它铸造。 但到底是什么? 强制数据到某个大小的对象? 当is
并as
有什么不同?
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
......即是 obj
的IList
? 是还是不是。
as
执行“尽量要做到这一点”式的检查; 如果失败则返回null
如果成功则返回类型引用(etc)。 基本上,这是一个效率的事情:
if(obj is IList) {
var list = (IList) obj;
...
}
效率低于:
var list = obj as IList;
if(list != null) {
...
}
如果 obj
为null,它们的行为也会不同;is
抛出异常;as
返回null
。
IList
提供IEnumerable
没有的某些方法。 最重要的是,添加它的能力(更多信息,请查看msdn ) is
比较类型,如果某个对象可以转换为类型,则返回。 as
实际执行的是演员阵容,返回null
,如果它失败了。 无论出于何种原因,转换意味着将类型A
的对象转换为类型B
的对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.