C# 非泛型IEnumerable和泛型IEnumerable之间有什么区别<;T>;?
很抱歉问了这么一个模糊的问题,但我已经找了一天中最好的时间,我读了一篇又一篇的文章(这里有很多问题),但就是找不到一个简单易懂的答案 我(想我)知道IEnumerable的用途,但我就是不明白当它用泛型类型参数定义时意味着什么,例如:C# 非泛型IEnumerable和泛型IEnumerable之间有什么区别<;T>;?,c#,generics,syntax,ienumerable,C#,Generics,Syntax,Ienumerable,很抱歉问了这么一个模糊的问题,但我已经找了一天中最好的时间,我读了一篇又一篇的文章(这里有很多问题),但就是找不到一个简单易懂的答案 我(想我)知道IEnumerable的用途,但我就是不明白当它用泛型类型参数定义时意味着什么,例如: IEnumerable<int> test = method(); IEnumerable test=method(); 这简直快把我逼疯了!请让我摆脱痛苦,解释一下它的含义吧?我只是想到了IEnumerable,就像我想到了列表一样,我想这更自然
IEnumerable<int> test = method();
IEnumerable test=method();
这简直快把我逼疯了!请让我摆脱痛苦,解释一下它的含义吧?我只是想到了
IEnumerable
,就像我想到了列表一样,我想这更自然一些。需要注意的是,IEnumerable
的功能不如列表
,而且本质上它只是一个可以枚举的整数你要找的单词是“泛型”,您给出的示例是IEnumerable用作int类型项的泛型。这意味着您使用的IEnumerable集合是强类型的,只包含int对象,而不是任何其他类型的对象
谷歌“C#generics IEnumerable”,你会找到你想要的所有信息。IEnumerable意味着它可以在foreach循环中使用
项
可以以下形式使用:
foreach(var item in items)
{
Console.WriteLine(item);
}
IEnumerable
基本上是对象的集合。它有一个方法GetEnumerator()
,允许您迭代枚举表中的所有对象
IEnumerable
基本上是整数的集合。它有一个方法GetEnumerator()
,允许您迭代枚举表中的所有整数
IEnumerable test=method()
表示method()
正在从某处获取一个集合if整数。它可以是一个列表、一个数组或其他一些数据类型,但它肯定是它们的一组,它们都是整数,您可以遍历它们
这篇文章可能也会有帮助:一个IEnumerable
有一个GetEnumerator
方法,它将返回一个IEnumerator
,其当前的
方法将返回一个对象
。IEnumerable
有一个GetEnumerator
方法,该方法将返回一个IEnumerator
,其Current
方法将返回一个T
。如果您事先知道枚举器将返回的对象的预期类型,通常最好使用泛型形式
另一个区别是,IEnumerator
继承了IDisposable
,它允许使用枚举器完成的代码调用Dispose
,而不必担心是否支持它。相比之下,当使用非通用的IEnumerator
时,有必要测试它是否可以IDisposable
,如果可以,则调用Dispose
。请注意,使用非通用形式的IEnumerable
/IEnumerator
并不能免除调用Dispose
的要求。例如,将vb样式的集合强制转换为IEnumerable
,然后在不调用Dispose
的情况下调用GetEnumerator
100000次将非常缓慢(很多秒,甚至在i7上),除非发生垃圾收集。每次调用后处理IEnumerator
,速度会提高100倍以上。我真的不喜欢这种类比。列表假定所有项目都位于一个位置。其中,作为一个IEnumerable
,它只表示您可以按某种顺序获取所有项。这就像电话簿和互联网之间的区别。我可以从任何一个地方得到芝加哥水管工的所有电话号码,但在电话簿中,他们已经在一个列表中了——而在IEnumerable
或互联网上,他们可以是任何人,我只需要知道如何找到他们——尽管我没有投你反对票,我只是觉得你的答案需要更清楚一点。user689466正在寻找一种理解IEnumerable的方法。很明显,两者之间存在差异——这只是一个容易理解的概念的起点,一旦他开始摸索,他就可以理解这两者之间的微妙之处了好吧,我想我现在明白了,我没有意识到这可能是一个收藏,我只是不明白它是如何运作的。是否有一个好的资源可以显示比较IEnumerable/list/array的优点/缺点,因为我真的想了解更多+1(如果可以!)列表和数组都实现IEnumerable
。System.collections.generic
中的所有泛型集合实现IEnumerable
。你可能对这个帖子感兴趣:谢谢。。。作为答案。。。你可能也想在你的主要答案中编辑/放置该链接,因为这确实让我现在完全理解了。