如何在 C# 中获取一个对象的多个子项的枚举器?
How to get enumerator for more than one sub-items of an object in C#?
这是我的class
class EmissionSource:IEnumerable
{
private Emissions[] emissions = new Emissions[5];
private Contribution[] contributions = new Contribution[2];
public EmissionSource()
{
emissions[0] = new Emissions(2010, 400, 200, 6);
emissions[1] = new Emissions(2011, 450, 255, 16);
emissions[2] = new Emissions(2012, 470, 245, 26);
emissions[3] = new Emissions(2013, 490, 285, 36);
emissions[4] = new Emissions(2014, 495, 245, 46);
contributions[0] = new Contribution(1, "Energy");
contributions[1] = new Contribution(3, "Industrial Sector");
}
public IEnumerator GetEnumerator()
{
return emissions.GetEnumerator();
}
}
在 GetEnumerator 方法中,我将请求委托给 System.Array 使用排放对象。我在想,我怎样才能遍历其他子项目即贡献,比如
foreach (Emissions e in source)
{
//
}
foreach (Contribution e in source)
{
//
}
我能想到的最好的办法就是使用两个不同的属性:
class Main
{
class X
{
private int[] i = new int[5];
private string[] s = new string[2];
public X()
{
i[0] = 0; i[1] = 1; i[2] = 2; i[3] = 3; i[4] = 4;
s[0] = "test"; s[1] = "test2";
}
public IEnumerable<string> Strings
{
get
{
return s;
}
}
public IEnumerable<int> Ints
{
get
{
return i;
}
}
}
private static void Main(string[] args)
{
X x = new X();
foreach (string s in x.Strings)
{ }
foreach (int i in x.Ints)
{ }
}
}
我已经尝试使用 IEnumerable 的通用版本并从 int 和 string 继承,但我无法让它工作,可能是因为通用版本再次从非通用 IEnumerable 继承,使其成为菱形继承树。或许可以作为思考的食粮。
class X : IEnumerable<int>, IEnumerable<string>
{
private int[] i = new int[5];
private string[] s = new string[2];
public X()
{
i[0] = 0; i[1] = 1; i[2] = 2; i[3] = 3; i[4] = 4;
s[0] = "test"; s[1] = "test2";
}
public IEnumerator GetEnumerator()
{
return i.GetEnumerator();
}
IEnumerator<int> IEnumerable<int>.GetEnumerator()
{
return (IEnumerator<int>)i.GetEnumerator();
}
IEnumerator<string> IEnumerable<string>.GetEnumerator()
{
return (IEnumerator<string>)i.GetEnumerator();
}
}
这是我的class
class EmissionSource:IEnumerable
{
private Emissions[] emissions = new Emissions[5];
private Contribution[] contributions = new Contribution[2];
public EmissionSource()
{
emissions[0] = new Emissions(2010, 400, 200, 6);
emissions[1] = new Emissions(2011, 450, 255, 16);
emissions[2] = new Emissions(2012, 470, 245, 26);
emissions[3] = new Emissions(2013, 490, 285, 36);
emissions[4] = new Emissions(2014, 495, 245, 46);
contributions[0] = new Contribution(1, "Energy");
contributions[1] = new Contribution(3, "Industrial Sector");
}
public IEnumerator GetEnumerator()
{
return emissions.GetEnumerator();
}
}
在 GetEnumerator 方法中,我将请求委托给 System.Array 使用排放对象。我在想,我怎样才能遍历其他子项目即贡献,比如
foreach (Emissions e in source)
{
//
}
foreach (Contribution e in source)
{
//
}
我能想到的最好的办法就是使用两个不同的属性:
class Main
{
class X
{
private int[] i = new int[5];
private string[] s = new string[2];
public X()
{
i[0] = 0; i[1] = 1; i[2] = 2; i[3] = 3; i[4] = 4;
s[0] = "test"; s[1] = "test2";
}
public IEnumerable<string> Strings
{
get
{
return s;
}
}
public IEnumerable<int> Ints
{
get
{
return i;
}
}
}
private static void Main(string[] args)
{
X x = new X();
foreach (string s in x.Strings)
{ }
foreach (int i in x.Ints)
{ }
}
}
我已经尝试使用 IEnumerable 的通用版本并从 int 和 string 继承,但我无法让它工作,可能是因为通用版本再次从非通用 IEnumerable 继承,使其成为菱形继承树。或许可以作为思考的食粮。
class X : IEnumerable<int>, IEnumerable<string>
{
private int[] i = new int[5];
private string[] s = new string[2];
public X()
{
i[0] = 0; i[1] = 1; i[2] = 2; i[3] = 3; i[4] = 4;
s[0] = "test"; s[1] = "test2";
}
public IEnumerator GetEnumerator()
{
return i.GetEnumerator();
}
IEnumerator<int> IEnumerable<int>.GetEnumerator()
{
return (IEnumerator<int>)i.GetEnumerator();
}
IEnumerator<string> IEnumerable<string>.GetEnumerator()
{
return (IEnumerator<string>)i.GetEnumerator();
}
}