use*_*603 0 c# generics ienumerator interface
如果这个问题听起来很愚蠢,我是新来的枚举集合,请原谅.
我上课了
public class PersonStuff : IPersonStuff, IEnumerable<User>
{
Person person = new Person();
...
IEnumerator<Person> IEnumerable<Person>.GetEnumerator()
{
return (person as IEnumerable<Person>).GetEnumerator();
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我在上面实现了两个接口:一个是IPersonStuff,另一个是IEnumerable.
Person类是一个简单的getter/setter,每个类型都是字符串,例如名称,地址除了dateofbirth是DateTime.
在我的IPersonStuff中我有这个:
interface IPersonStuff
{
...
IEnumerator<Person> IEnumerable<Person>.GetEnumerator();
}
Run Code Online (Sandbox Code Playgroud)
一旦工作,我想以下面的方式(从任何类)来调用它:
IPersonStuff personStuff = new PersonStuff();
foreach (Person u in personStuff)
{
//this loop should iterate thru the elements.
}
Run Code Online (Sandbox Code Playgroud)
但是,我收到以下错误:
基本上我想知道如何通过IPersonStuff接口调用我在PersonStuff类中的IEnumerator IEnumerable.GetEnumerator().
是IPersonStuff自身收集状,或只是一堆性质的?如果它不像集合那样,就没有必要让它可以枚举.
我认为错误是由于using System.Collections.Generic但不是System.Collections- 非泛型IEnumerable因此不在范围内.
我想如果你想IPersonStuff成为可枚举的那么你就可以拥有IPersonStuff继承IEnumerable<T>(继而继承IEnumerable).否则,我认为你不能使用foreach过引用IPersonStuff.
编辑基于进一步评论和编辑,它看起来像PersonStuff旨在集合类数据访问类的Person,用实例托管的Monostate时尚.
monostate实例化失败了定义接口的点IPersonStuff:如果你总是用new PersonStuff()内联创建它,那么(bar 字节码后处理)就没有机会使用接口的一些非默认实现.
我建议使用表示每个全局实体集合的属性来定义某种数据访问上下文对象,然后以您选择的方式传递它 - 使用参数或基于访问器的单例优于单值.然后,该对象可以包装数据库连接,NHibernate会话或类似物.