很抱歉这个模糊的问题,但我一直在寻找一天中最好的部分,我已经阅读了文章(这里有很多问题),但是找不到一个容易理解的答案。
我(我想)知道IEnumerable的用途是什么,但我无法理解用泛型类型参数定义它意味着什么,例如:
IEnumerable<int> test = method();
这只是让我发疯!请让我摆脱痛苦并解释它的含义?
答案 0 :(得分:13)
IEnumerable
基本上是一组对象。它具有方法GetEnumerator()
,允许您遍历可枚举中的所有对象。
IEnumerable<int>
基本上是整数的集合。它有方法GetEnumerator()
,它允许你遍历枚举中的所有整数。
IEnumerable<int> test = method();
表示如果来自某个地方的整数,method()
正在获取集合。它可以是List,数组或其他一些数据类型,但它绝对是它们的一组,它们都是整数,并且您可以遍历它们。
这篇文章也许有帮助:What's the difference between IEnumerable and Array, IList and List?
答案 1 :(得分:2)
我只是想到IEnumerable<int>
,就像我想到的List<int>
一样,我想这会更自然。需要注意的是IEnumerable<int>
并不像List<int>
那么多,而且基本上它只是一个可以枚举的事物
答案 2 :(得分:2)
IEnumerable
有GetEnumerator
方法,该方法将返回IEnumerator
,其Current
方法将返回Object
。 IEnumerable<T>
有一个GetEnumerator
方法会返回IEnumerator<T>
,其Current
方法将返回T
。如果事先知道枚举器要返回的对象的预期类型,通常最好使用通用表单。
另一个区别是IEnumerator<T>
继承IDisposable
,它允许使用枚举器完成的代码在其上调用Dispose
,而不必担心它是否受支持。相比之下,当使用非通用IEnumerator
时,有必要测试它是IDisposable
并在其上调用Dispose
,如果是这样的话。请注意,使用非通用形式的IEnumerable
/ IEnumerator
并不能减轻调用Dispose
的要求之一。例如,将vb样式的集合强制转换为IEnumerable
,然后在不调用GetEnumerator
的情况下调用Dispose
100,000次将非常缓慢(很多秒,即使在i7上),除非垃圾 - 收集恰好发生。每次通话后处理IEnumerator
将加速一百多倍。
答案 3 :(得分:0)
您正在寻找的单词是“泛型”,您给出的示例是IEnumerable,它被用作int类型项的泛型。这意味着您正在使用的IEnumerable集合是强类型的,只能保存int对象而不是任何其他类型。
Google“C#generics IEnumerable”,您可以在此找到所需的所有信息。
答案 4 :(得分:0)
IEnumerable意味着它可以在foreach循环中使用。
test
可以
foreach(int item : test)
{
console.writeline(item);
}