即使是男生也可以回答,这甚至可能是一个简单的问题。
“ForEach”和“Using”之间的相同点和不同点(在采访中询问)。
我的假设是
1)两者都是可枚举的
2)使用可以处理内存资源,但是foreach不能。使用支持IDisposable,foreach不能。
我想知道答案。
答案 0 :(得分:8)
foreach
实施IEnumerable
,IDisposable
会处置您的{{1}}。答案 1 :(得分:4)
using
定义了一个范围,在该范围之外将放置一个或多个对象。它不会循环或迭代。
答案 2 :(得分:4)
它们都有不同的用途。
foreach
用于枚举集合/数组中的项目。 using
是一种方便的结构,可确保您妥善处理您使用的物品。即使例如抛出异常。
这两种结构的相似之处是奇怪的。任何人都可以想到任何相似之处(除了非常明显的:'它们都是C#中的关键词')?
答案 3 :(得分:3)
foreach
和using
之间的主要区别在于foreach
用于枚举IEnumerable
,而using
用于定义范围外其中一个物体将被处置。
foreach
和using
之间存在一个相似之处:枚举器实现IDisposable
,而foreach
将隐式包含using
块中枚举数的使用。另一种说法是,foreach
可以被重新编码为使用块,结果IL将是相同的。
代码块
var list = new List<int>() {1, 2, 3, 4, 5};
foreach(var i in list) {
Console.WriteLine(i);
}
实际上与
相同var list = new List<int>() {1, 2, 3, 4, 5};
using (var enumerator = list.GetEnumerator()) {
while (enumerator.MoveNext()) {
Console.WriteLine(enumerator.Current);
}
}
答案 4 :(得分:3)
相似点:
但这就是结束的地方......
using
要求 IDisposable
; foreach
可能从IEnumerable[<T>]
触发,但实际上是鸭子类型(IEnumerable
不需要foreach
)using
具有可预测的try
/ finally
结构;如果迭代器为foreach
,则Dispose()
可能涉及IEnumerable<T>
如果有的话,我会说using
更接近lock
而不是foreach
。