【问题标题】:Checking every array member in an if statement to look for a specific array member检查 if 语句中的每个数组成员以查找特定的数组成员
【发布时间】:2021-09-04 10:26:11
【问题描述】:

我正在尝试创建一个系统,其中我有一个字符串数组,其中每个成员都说同样的事情(“空”),但 if 语句/foreach 组合仅更改那些“空”中的 一个单击按钮时,“s”变为“完整”。所以首先我用类似的东西开始if 声明

if (inv[0] == "Empty" || inv[1] == "Empty" || inv[2] == "Empty")

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

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

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

【问题讨论】:

标签: c# arrays if-statement foreach


【解决方案1】:

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

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

【讨论】:

  • 谢谢!不过,我认为我找不到 StringComparison 。 (我正在使用统一)并且此处的错误消息表示它在当前上下文中不存在。如果你不介意我问的话,OrdinalIgnoreCase 是什么?
  • 您可以在这里阅读更多内容docs.microsoft.com/en-us/dotnet/api/…,但总而言之,它比较两个字符串不区分大小写。为了统一找到它,您可以编写 System.StringComparison.OrdinalIgnoreCase 或使用 System;在你的脚本顶部。
【解决方案2】:

为什么不直接使用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;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多