C# 中的 IEnumerable
背景
很多时候需要遍历匿名类型的类或列表的集合。IEnumerable 接口是循环遍历集合的 C# 语言的最佳特性之一。让我们一步一步地了解它,以便初学者也能理解。
什么是 C# 中的 IEnumerable?
C# 中的 IEnumerable 是一个接口,它定义了一个方法 GetEnumerator,它返回一个 IEnumerator 接口。这允许对集合进行只读访问,然后实现 IEnumerable 的集合可以与 for-each 语句一起使用。
关键点
- IEnumerable 接口包含 System.Collections.Generic 命名空间。
- IEnumerable 接口是一个通用接口,它允许循环通用或非通用列表。
- IEnumerable 接口也适用于 linq 查询表达式。
- IEnumerable 接口返回一个遍历集合的枚举器。
让我们在一个类中实现 IEnumerable 接口:
public class Customer : IEnumerable
{
public IEnumerator GetEnumerator()
{
throw new NotImplementedException();
}
}
在上面的示例中,您已经看到,在实现 IEnumerable 接口之后,有一个名为 GetEnumerator 的方法以及接口 IEnumerator,它有助于从集合中获取当前元素。
IEnumerator 接口的方法
IEnumerator 是一个帮助从集合中获取当前元素的接口,它有以下两种方法
- MoveNext()
- Reset()
MoveNext()
将枚举器设置为集合的下一个元素;如果枚举数已成功设置为下一个元素,则返回 true,如果枚举数已到达集合的末尾,则返回 false。
Reset()
将枚举数设置为其初始位置,该位置位于集合中的第一个元素之前。
IEnumerator 接口的属性
IEnumerator 接口有一个名为 Current 的属性,它返回集合中的当前元素。
让我们在类中实现 IEnumerator 接口:
public class Customer : IEnumerator
{
public object Current
{
get { throw new NotImplementedException(); }
}
public bool MoveNext()
{
throw new NotImplementedException();
}
public void Reset()
{
throw new NotImplementedException();
}
}
在上面的类中,我们已经实现了 IEnumerator 接口,它显示了我们已经解释过的上述两种方法和一个属性。
IEnumerable 与 IEnumerator 接口
在阅读这两个名称时,可能会令人困惑,因此让我们了解这两个名称之间的区别。
- IEnumerable 和 IEnumerator 都是接口。
- IEnumerable 只有一种称为 GetEnumerator 的方法。此方法返回另一种类型,即接口为 IEnumerator 的接口。
- 如果我们想在任何集合类中实现枚举器逻辑,就需要实现 IEnumerable 接口(泛型或非泛型)。
- IEnumerable 只有一种方法,而 IEnumerator 有两种方法(MoveNext 和 Reset)和一个属性 Current。
对于我们的理解,我们可以说 IEnumebale 是一个包含 IEnumerator 的盒子。
让我们通过创建一个简单的应用程序来实际学习它。
现在将项目创建为:
- “开始”-“所有程序”-“Microsoft Visual Studio 2010”。
- “文件”-“新项目”-“C#”-“空项目”(避免添加母版页)。
- 根据需要提供项目名称,例如 “IEnumerableInterface”或其他名称,并指定位置。
- 然后右键单击解决方案资源管理器并选择“添加新项目”,然后选择 Default.aspx 页面。
- 添加一个按钮。
现在 Default.aspx 源代码如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="IEnumerableInterface.Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:Button ID="Button1" runat="server" Text="GetList" OnClick="Button1_Click" />
</form>
</body>
</html>
现在打开 Default.aspx.cs 类文件并创建名为 Customer 的类,其属性为:
常见问题FAQ
- 程序仅供学习研究,请勿用于非法用途,不得违反国家法律,否则后果自负,一切法律责任与本站无关。
- 请仔细阅读以上条款再购买,拍下即代表同意条款并遵守约定,谢谢大家支持理解!