【发布时间】:2022-01-01 06:09:08
【问题描述】:
我想使用 yield 关键字将此语句以构建用于测试的 VM 映像列表转换为更优雅的内容,但语法使我难以理解。
期望的最终目标。
List<VmImages> images;
images[0] - WindowsServer2019
images[1] - WindowsServer2016
images[2] - RhelServer;
images[3] - OpenLogic;
今天的代码是这样的:
for (var i = 0; i < LinuxVMs; i++)
{
switch (i)
{
case 0:
linuxDistros.Add(ConfigLoader.redHat);
break;
case 1:
linuxDistros.Add(ConfigLoader.openLogic);
break;
case 2:
linuxDistros.Add(ConfigLoader.suse);
break;
case 3:
linuxDistros.Add(ConfigLoader.ubuntu);
break;
}
}
这感觉像是使用 yield 关键字将逻辑简化成这样的一个很好的例子,我调用 GetLinuxVMs() x 次,其中 X 是 LinuxVMs 的计数。
private static IEnumerable<VmDistribution> GetLinuxVmDistros()
{
yield return ConfigLoader.redHat;
yield return ConfigLoader.openLogic;
yield return ConfigLoader.suse;
yield return ConfigLoader.canonical;
}
我不确定如何将它集成到我的代码中,这是我尝试过的:
for (var i = 0; i < LinuxVMs; i++)
{
linuxDistros.Add(GetLinuxVmDistros());
}
由于我每次都从 GetLinuxVmDistros 方法返回一个 IEnum,我对它应该如何工作感到困惑。
【问题讨论】:
-
linuxDistros的类型是什么? -
出于好奇,你为什么需要一个循环和一个 switch 语句来简单地将 4 个值添加到列表中?那可能是 4 行一样。也许坚持下去。
-
您的代码似乎与您的最终目标不一致
-
小心,您可以在TheDailyWTF 上结束操作 :-)
-
@HansKesting 那篇文章让我认为我正在尝试的是一个坏主意。感谢您的提示!
标签: c# yield yield-return