Fox*_*loy 1 c# yield yield-return
我想使用yield关键字将此语句转换为更优雅的东西,以构建用于测试的VM映像列表,但语法让我困惑。
期望的最终目标。
List<VmImages> images;
images[0] - WindowsServer2019
images[1] - WindowsServer2016
images[2] - RhelServer;
images[3] - OpenLogic;
Run Code Online (Sandbox Code Playgroud)
今天的代码如下所示:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
这感觉是一个很好的例子,使用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;
}
Run Code Online (Sandbox Code Playgroud)
我不确定如何将其集成到我的代码中,这是我尝试过的:
for (var i = 0; i < LinuxVMs; i++)
{
linuxDistros.Add(GetLinuxVmDistros());
}
Run Code Online (Sandbox Code Playgroud)
由于我每次都会从该方法中得到一个 IEnum GetLinuxVmDistros
,所以我很困惑它到底是如何工作的。
从您所说的“期望的最终目标”
List<VmImages> images = new() {
WindowsServer2019,
WindowsServer2016,
RhelServer,
OpenLogic
}
Run Code Online (Sandbox Code Playgroud)
恕我直言,所有其余的循环/欺骗只是让问题变得混乱