Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I make a class iterable?

Tags:

This is my class

public class csWordSimilarity {     public int irColumn1 = 0;     public int irColumn2 = 0;     public int irColumn3 = 0;     public int irColumn4 = 0;     public int irColumn5 = 0; } 

I want to make that class iterable to be used like the way below

foreach (int irVal in myVarWordSimilarity) {  }  

myVarWordSimilarity is csWordSimilarity type. So I want to iterate all public int variables. How do I need to modify csWordSimilarity class for making it iterable like the way above.

like image 441
MonsterMMORPG Avatar asked Feb 26 '12 16:02

MonsterMMORPG


2 Answers

You can implement IEnumerable and have the GetEnumerator override return an "iterator" over the variables using the yield statement

class csWordSimilarity : IEnumerable<int> {     private int _var1 = 1;     private int _var2 = 1;     private int _var3 = 1;     private int _var4 = 1;      public IEnumerator<int> GetEnumerator()     {         yield return _var1;         yield return _var2;         yield return _var3;         yield return _var4;     }      IEnumerator IEnumerable.GetEnumerator()     {         return GetEnumerator();     } } 
like image 191
edvaldig Avatar answered Oct 01 '22 20:10

edvaldig


Implement IEnumerable. See Using Iterators (C# Programming Guide)

In your case you could just use the built-in iterator of a List like so:

using System; using System.Collections.Generic;  class csWordSimilarity : IEnumerable<int> {     public int irColumn1 = 0;     public int irColumn2 = 0;     public int irColumn3 = 0;     public int irColumn4 = 0;     public int irColumn5 = 0;      public IEnumerator<int> GetEnumerator() {         return (new List<int>() {              irColumn1, irColumn2, irColumn3, irColumn4, irColumn5          }).GetEnumerator();     }     System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() {         return GetEnumerator();     } } 
like image 23
Joshua Honig Avatar answered Oct 01 '22 19:10

Joshua Honig