gpt4 book ai didi

c# - 使用 IEnumerator 和使用数组作为属性之间的区别

转载 作者:行者123 更新时间:2023-12-02 07:16:35 26 4
gpt4 key购买 nike

我得到了 IEnumerator 的想法,它赋予了类迭代的能力。我明白为什么需要 GetEnumerable() 才能使用 foreach 语句。但我想知道为什么我需要实现 IEnumerator 而我可以将数组声明为属性?我真的很困惑,可以使用一个很好的解释。这是我的代码块,无论有没有 IEnumerator 实现,结果都是一样的。

static void Main(string[] args)
{

Customer customer1 = new Customer
{
Name = "Marty",
Surname = "Bird",
Id = 1
};
Customer customer2 = new Customer
{
Name = "Hellen",
Surname = "Pierce",
Id = 2
};
Customers customers = new Customers();
customers.Add(customer1);
customers.Add(customer2);
//Using a property: This one works without an extra GetEnumerator implementation.
foreach (var item in customers.CustomerList)
{
Console.WriteLine(item.Name);
}
//Using with GetEnumerator()
foreach (Customer item in customers)
{
Console.WriteLine(item.Name);
}

}
class Customer
{
public int Id { get; set; }
public string Name { get; set; }
public string Surname { get; set; }
}

class Customers:IEnumerable
{
private List<Customer> customerList = new List<Customer>();

public List<Customer> CustomerList { get=> customerList; }
public void Add(Customer p)
{
customerList.Add(p);
}

public IEnumerator GetEnumerator()
{
return customerList.GetEnumerator();
}
}

最佳答案

您根本不需要实现 IEnumerator。您可以摆脱客户类并替换该行:

Customers customers = new Customers();

用这个:

List<Customer> customers = new List<Customers>();

您需要实现 GetEnumerator 的唯一原因是因为您从 IEnumerable 继承了 Customers 类,IEnumerable 是声明该方法的接口(interface)。接口(interface)中的所有方法和属性都必须在实现该接口(interface)的类中实现。

刚刚给出的代码你不需要客户类,只需使用我上面解释的列表。

但是,如果您真的需要一个客户类,因为您计划向它添加比您所展示的更多的功能,一个选择是从 List<Customer> 继承。 .然后它可以在 foreach 语句中工作,而无需实现 GetEnumerable(),因为 List 已经实现了该方法。

关于c# - 使用 IEnumerator 和使用数组作为属性之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61829455/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com