c# - Implementing IEnumerator/ IEnumerable with IDispose error -
i've been trying build in ienumorator allow use foreach statement insert large number of rows extracted json formatted string these nested objects. applines class consists exclusively of string get/set statements.
for reason i'm getting 3 errors pointing class header. can't understand a) why , how need implement idisposable b) why dose compiler disagree return types.
'appannieimport' not implement interface member 'system.collections.ienumerable.getenumerator()'. 'appannieimport.getenumerator()' cannot implement 'system.collections.ienumerable.getenumerator()' because not have matching return type of 'system.collections.ienumerator'.
'appannieimport' not implement interface member 'system.idisposable.dispose()'
'appannieimport' not implement interface member 'system.collections.generic.ienumerator.current'. 'appannieimport.current' cannot implement 'system.collections.generic.ienumerator.current' because not have matching return type of 'applines'.
public class appannieimport : ienumerator<applines>, ienumerable<applines> { public int code { get; set; } public datetime end_date { get; set; } public string vertical { get; set; } public string granularity { get; set; } public string device { get; set; } public list<applines> appline { get; set; } private int position; //ienumerator , ienumerable require these methods. public ienumerator<applines> getenumerator() { return (ienumerator<applines>)this; } //ienumerator public bool movenext() { position++; return (position < appline.count); } //ienumerable public void reset() { position = 0; } //ienumerable public object current { { return (appline.toarray())[position] ; } } }
ienumerator<t>
inherits idisposable
, have implement , provide dispose
method.
ienumerator<t>
inherits ienumerator
, have implement , provide getenumerator()
function returning ienumerator
.
ienumerator<t>
defines property current
returns t
, have implement one.
i guess confusion arises fact generic ienumerable<t>
, ienumerator<t>
inherit non-generic versions (ienumerable
, ienumerator
), demanding implement methods same name different return value types; , ienumerator<t>
inherits idisposable
while ienumerator
not.
so, in end, class should like
public class appannieimport : ienumerator<applines>, ienumerable<applines> { public int code { get; set; } public datetime end_date { get; set; } public string vertical { get; set; } public string granularity { get; set; } public string device { get; set; } public list<applines> appline { get; set; } private int position; //ienumerator , ienumerable require these methods. public ienumerator<applines> getenumerator() { return (ienumerator<applines>)this; } ienumerator ienumerable.getenumerator() { return (ienumerator<applines>)this; } //ienumerator public bool movenext() { position++; return (position < appline.count); } //ienumerable public void reset() { position = 0; } //ienumerable object ienumerator.current { { return (appline.toarray())[position] ; } } public applines current { { return (appline.toarray())[position] ; } } public void dispose() { // or not } }
making use of explicit interface implementation (you may want rid of code duplication).
Comments
Post a Comment