检查 if 语句中的每个数组成员以查找特定的数组成员

问题描述

我正在尝试创建一个系统,其中我有一个字符串数组,其中每个成员都说相同的事情(“Empty”),但是 if 语句/foreach 组合仅更改其中一个“Empty”单击按钮时,“s”变为“Full”。所以首先我用类似

的东西开始 if 语句
if (inv[0] == "Empty" || inv[1] == "Empty" || inv[2] == "Empty")

等,直到它覆盖数组的每个成员,确保至少有一个“Empty”(因为它应该只将“Empty”更改为“Full”,如果确实存在“Empty”)。>

在那之后,我想我应该使用 foreach,但我不确定如何使用。

无论如何,任何帮助将不胜感激。如果您需要我将代码发送给我,请告诉我。

解决方法

您可以像这样查找是否有任何项目为空。

 bool isEmptyFound = false;
 foreach (var item in inv)
    if (item.Equals("Empty",StringComparison.OrdinalIgnoreCase))
    {
        isEmptyFound = true;
        break;
    }
 //if isEmptyFound == true there is atleast one item that is "Empty"

您不能通过 foreach 更改项目值,您需要使用简单的 for 循环。

for (int i = 0; i < inv.Length; i++)
    if (inv[i].Equals("Empty",StringComparison.OrdinalIgnoreCase))
    {
        inv[i] = "Full";
        break;
    }
,

为什么不直接使用 Array.IndexOf 来查找 Empty 的索引,然后将其更改为 Full,如下所示:

int indexOfEmpty = Array.IndexOf(inv,"Empty");

//check if inv has a value set to "Empty"
if (indexOfEmpty != -1)
{
    //change the "Empty" we found at indexOfEmpty to "Full"
    inv[indexOfEmpty] = "Full";
}

如果你想用循环手动完成,那么你可以像这样使用 for 循环:

bool foundEmpty = false;

for (int i = 0; i < inv.Length; i++)
{
    if (inv[i] == "Empty")
    {
        inv[i] = "Full";
    
        foundEmpty = true;

        break;
    }
}