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

Popular posts from this blog

android - Get AccessToken using signpost OAuth without opening a browser (Two legged Oauth) -

org.mockito.exceptions.misusing.InvalidUseOfMatchersException: mockito -

google shop client API returns 400 bad request error while adding an item -