Reputation: 23830
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.
Upvotes: 30
Views: 30557
Reputation: 13215
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();
}
}
Upvotes: 7
Reputation: 2299
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();
}
}
Upvotes: 39