Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 每个循环中的Else if语句-C_C#_Foreach - Fatal编程技术网

C# 每个循环中的Else if语句-C

C# 每个循环中的Else if语句-C,c#,foreach,C#,Foreach,我有一个类似这样的foreach循环,其中我希望else条件输出:如果找不到quad.ID==searchForQuadcopters,则未找到unit,但即使找到该值,我也会得到该字符串值输出 foreach (var quad in allQuadcopters) { if (quad.ID == searchForQuadcopter) { WriteLine("Value found."); // write here

我有一个类似这样的foreach循环,其中我希望else条件输出:如果找不到quad.ID==searchForQuadcopters,则未找到unit,但即使找到该值,我也会得到该字符串值输出

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");
    }
}
我希望else条件输出:如果找不到quad.ID==searchForQuadcopters,则未找到单位

那你就不需要这个循环了。您的代码在所有项目上循环,并且如果所有Quadcopters包含ID1、2和3,并且您正在查找2,它将打印ID1和3的未找到单元。你可以打破;退出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}");
}

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

创建布尔标志以跟踪是否找到该值:

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");
}

既然您正在使用一个循环,即检查多个元素,那么您如何知道该消息针对的是满足if条件的元素,而不是不满足if条件的元素?你做了什么来验证吗?@41686d6564是的我已经测试过了,在控制台中,如果没有值,则输出为空;如果有值,则输出值,但即使有值,也输出未找到的单位。这是一个循环,因此它将根据单个四元组多次显示“已找到值”和“未找到值”消息。我们的方法接近,但不完全接近。您将为所有Quadcopters中的每个quad计算if/else语句,它将匹配或不匹配,并相应地输出文本。您需要做的是检查所有四边形,直到找到匹配项,然后输出详细信息。只有在找不到匹配项的情况下,才会输出找不到的单元,这必须发生在循环之外。想一想——我相信你会明白的。你考虑过用LINQ来代替吗?var quad=allQuadcopters.Whereq=>q.ID==searchforQuadcopter.SingleOrDefault将为您提供有问题的对象或null如果您不想使用此循环->小心,有人可能会将其解释为LINQ神奇地不使用循环:谢谢大家的帮助:谢谢大家的帮助: