1)我读了一些(一般)代码片段,看到了IList<T>一些使用过的地方和一些使用过的地方IEnumerable.使用第一个优于后者的优点是什么?
2)is和asc#.我明白 is做类型检查并as做铸造.但到底是什么?强制数据到某个大小的对象?什么时候is和as不同?
Mar*_*ell 29
A IList[<T>]表示以下内容:
IEnumerable另一方面,An 只能迭代.并非所有可以迭代的东西都是列表.例如:
static IEnumerable<int> Get() {
Random rand = new Random();
while(true) yield return rand.Next();
}
Run Code Online (Sandbox Code Playgroud)
^^^是一个无限的序列.它没有长度,不能变异,不能通过索引访问...但是,它可以迭代:
foreach(int i in Get().Take(200)) {
Console.WriteLine(i);
}
Run Code Online (Sandbox Code Playgroud)
is执行一个返回类型检查true/ false...即是 obj一个IList?是还是不是.
as执行"尝试做这个"类型检查; null如果失败则返回,如果成功则返回类型引用(etc).基本上,这是一个效率的事情:
if(obj is IList) {
var list = (IList) obj;
...
}
Run Code Online (Sandbox Code Playgroud)
效率低于:
var list = obj as IList;
if(list != null) {
...
}
Run Code Online (Sandbox Code Playgroud)
如果obj为null,它们的行为也会不同; is抛出异常; as回报null.