Iva*_*nov 19 c# ienumerable class
所以我内部有一个类和一个通用List,但它是私有的.
class Contacts
{
List<Contact> contacts;
...
}
Run Code Online (Sandbox Code Playgroud)
我想让这个课有效:
foreach(Contact in contacts) .... ;
Run Code Online (Sandbox Code Playgroud)
像这样(不工作):
Contacts c;
foreach(Contact in c) .... ;
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,Contact类实例c必须从联系人返回每个项目(c的私有成员)
我该怎么做?我知道它必须是IEnumerable与yield return,但在哪里声明?
Lig*_*ker 31
实现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
}
Run Code Online (Sandbox Code Playgroud)
Tim*_*ter 13
或者IEnumerator<Contact>通过提供GetEnumerator方法返回:
class Contacts
{
List<Contact> contacts;
public IEnumerator<Contact> GetEnumerator()
{
foreach (var contact in contacts)
yield return contact;
}
}
Run Code Online (Sandbox Code Playgroud)
在foreach验看GetEnumerator.请看这里有关此语言规范的详细信息:https://stackoverflow.com/a/3679993/284240
public class Contacts: IEnumerable
{
......
public IEnumerator GetEnumerator()
{
return contacts.GetEnumerator();
}
}
Run Code Online (Sandbox Code Playgroud)
应该为你做一个技巧.