微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

其他每个循环的if语句-C#

如何解决其他每个循环的if语句-C#

我有一个这样的foreach循环,如果没有找到quad.ID == searchForQuadcopters,我希望else条件输出:“找不到单位”,但是即使找到该值,我也会得到此字符串值输出

foreach (var quad in allQuadcopters)
{
    if (quad.ID == searchForQuadcopter)
    {
        WriteLine("Value found.");
        // write here all the information you want to display.
        WriteLine($"ID: {quad.ID}");
        WriteLine($"Capacity (kg): {quad.capacityKg}");
        WriteLine($"Reach (km): {quad.reachKm}");
        WriteLine($"Transponder ID: {quad.transponderID}");
        quad.vehicleDeliveryForm();
    }
    else
    {
        WriteLine("Unit not found");
    }
}

解决方法

除非您先遍历整个列表并且不遇到它,否则您不会知道是否找不到该值。

创建一个布尔标志来跟踪是否找到了该值:

bool found = false;
foreach (var quad in allQuadcopters)
{
    if (quad.ID == searchForQuadcopter)
    {
        found = true;
        WriteLine("Value found.");
        // write here all the information you want to display.
        WriteLine($"ID: {quad.ID}");
        WriteLine($"Capacity (kg): {quad.capacityKg}");
        WriteLine($"Reach (km): {quad.reachKm}");
        WriteLine($"Transponder ID: {quad.transponderID}");
        quad.vehicleDeliveryForm();
        break; // if you don't want to iterate over the rest
    }
}
if (!found) {
  WriteLine("Unit not found");
}
,

我希望else条件输出:如果找不到quad.ID == searchForQuadcopters

然后,您不需要此循环。您的代码将遍历所有项目,如果allQuadcopters包含ID 1、2和3,而您正在寻找2,它将为ID 1和3打印“找不到单元”。您可以break; if()中跳出循环,但else仍然会被击中1。

您要在此处利用Linq:

var quad = allQuadcopters.FirstOrDefault(q => q.ID == searchForQuadcopters);

if (quad == null)
{
    WriteLine("Unit not found");
}
else
{
    WriteLine("Value found.");
    // write here all the information you want to display.
    WriteLine($"ID: {quad.ID}");
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。