[英]How to make the class as an IEnumerable in C#?
所以我内部有一个类和一个通用List,但它是私有的。
class Contacts
{
List<Contact> contacts;
...
}
我想让这个课有效:
foreach(Contact in contacts) .... ;
像这样(不工作):
Contacts c;
foreach(Contact in c) .... ;
在上面的示例中,Contact类实例c必须从联系人返回每个项目(c的私有成员)
我该怎么做? 我知道它必须是IEnumerable与yield return,但在哪里声明?
实现IEnumerable接口:
class Contacts : IEnumerable<Contact>
{
List<Contact> contacts;
#region Implementation of IEnumerable
public IEnumerator<Contact> GetEnumerator()
{
return contacts.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
#endregion
}
或者通过提供GetEnumerator
方法返回IEnumerator<Contact>
:
class Contacts
{
List<Contact> contacts;
public IEnumerator<Contact> GetEnumerator()
{
foreach (var contact in contacts)
yield return contact;
}
}
foreach
寻找GetEnumerator
。 请看这里有关此语言规范的详细信息: https : //stackoverflow.com/a/3679993/284240
public class Contacts: IEnumerable
{
......
public IEnumerator GetEnumerator()
{
return contacts.GetEnumerator();
}
}
应该为你做一个技巧。
class Program
{
static void Main(string[] args)
{
var list = new Contacts();
var a = new Contact() { Name = "a" };
var b = new Contact() { Name = "b" };
var c = new Contact() { Name = "c" };
var d = new Contact() { Name = "d" };
list.ContactList = new List<Contact>();
list.ContactList.Add(a);
list.ContactList.Add(b);
list.ContactList.Add(c);
list.ContactList.Add(d);
foreach (var i in list)
{
Console.WriteLine(i.Name);
}
}
}
class Contacts : IEnumerable<Contact>
{
public List<Contact> ContactList { get; set; }
public IEnumerator<Contact> GetEnumerator()
{
return ContactList.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return ContactList.GetEnumerator();
}
}
class Contact
{
public string Name { get; set; }
}
如何扩展List<Contact>
如果您不想扩展任何其他类,那么它是一个非常简单,快速的选项:
class Contacts :List<Contact>
{
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.