You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# 如何将switch case生成VM镜像列表的逻辑改用yield实现

你已经用yield写好了返回镜像序列的方法,只需要一行代码就能替换原来整个for+switch逻辑:

// 需引入命名空间 using System.Linq;
linuxDistros.AddRange(GetLinuxVmDistros().Take(LinuxVMs));

实现说明

  • Take(n)方法会从GetLinuxVmDistros()返回的序列中按顺序取前n个元素(n就是你的配置值LinuxVMs),刚好匹配你原来按序号取对应镜像的需求
  • AddRange()可以直接把IEnumerable类型的序列批量加到已有的linuxDistros集合中,不需要你自己循环遍历添加
  • 这种实现还天然处理了边界情况,如果LinuxVMs的配置值大于你yield返回的总镜像数(当前是4个),会自动只返回所有可用的镜像,不会抛出异常,比原来的switch写法更安全

如果你不想依赖LINQ,也可以手动遍历取指定数量的元素:

using var enumerator = GetLinuxVmDistros().GetEnumerator();
for (var i = 0; i < LinuxVMs && enumerator.MoveNext(); i++)
{
    linuxDistros.Add(enumerator.Current);
}

你之前的写法报错是因为GetLinuxVmDistros()返回的是整个镜像序列,不是单个VmDistribution类型的元素,自然不能直接Add到元素类型为VmDistribution的集合里。

内容的提问来源于stack exchange,提问作者FoxDeploy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 01:54:00