【发布时间】:2016-06-13 12:41:53
【问题描述】:
我在下面有一个我想要做的简化版本。我有一个由 SolarSystem 类使用的 Planet 类。我想使用 foreach 循环为 SolarSystem 中的每个行星编写 orbitTimeInDays。
错误 CS1579 foreach 语句不能对类型变量进行操作 'TestEnum.SolarSystem' 因为 'TestEnum.SolarSystem' 不包含 'GetEnumerator' 的公共定义
问题在于枚举,我已经阅读了几篇关于使对象可枚举的文章和问题,但我似乎无法弄清楚如何将它应用于 SolarSystem,因此我可以检查它所构建的每个行星。 (最终它还会包含小行星等,所以它不仅仅是 8 颗行星和冥王星。)
有人可以帮我理解如何枚举 SolarSystem。
class Program
{
static void Main(string[] args)
{
SolarSystem solarSystem = new SolarSystem();
solarSystem.mercury.orbitTimeInDays = 88;
solarSystem.venus.orbitTimeInDays = 225;
// etc...
foreach (Planet planet in solarSystem)
{
Console.WriteLine("Time taken to orbit sun (in days) : " + planet.orbitTimeInDays.ToString());
}
}
}
public class Planet
{
public double distanceFromEarth { get; set; }
public int orbitTimeInDays { get; set; }
// etc...
public Planet() { }
}
public class SolarSystem
{
public Planet mercury { get; set; }
public Planet venus { get; set; }
// etc...
public SolarSystem()
{
mercury = new Planet();
venus = new Planet();
// etc...
}
}
【问题讨论】:
-
问题是你的行星是同一类的每个单独的属性,你可以用一点花哨的方式来做到这一点,但实际上,你最好用你的太阳系中的行星列表来做。也许其他一些道具,然后你可以foreach行星列表..
-
ForEach循环适用于数组等,其方式类似于for循环。你有一个类而不是几个属性。
标签: c# foreach enumeration enumerate