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

如何一次性判断数组中所有Button是否均处于激活状态?

问题分析

你的原有代码存在两处核心逻辑错误,导致无法得到正确结果:

  • 判断时机错误:每遍历一个按钮就直接输出状态,只要碰到第一个可交互按钮就会多次输出「至少一个激活」,碰到第一个不可交互按钮就错误判定所有按钮都未激活,和「判断全部按钮是否激活」的需求不符
  • 状态标记缺失:没有用独立变量存储全局判断结果,break仅能终止循环,无法输出正确的全局状态
修复方案

方案1:原生for循环实现(性能最优,无额外依赖)

先定义全局状态标记,遍历完成后再统一输出结果:

public Button[] bts;

public void StateButton()
{
    // 初始假设所有按钮都激活
    bool allInteractable = true;
    for (int i = 0; i < bts.Length; ++i)
    {
        // 只要找到一个未激活按钮,修改标记后终止循环
        if (!bts[i].interactable)
        {
            allInteractable = false;
            break;
        }
    }
    // 遍历完成后统一输出
    if (allInteractable)
    {
        Debug.Log("所有按钮都处于激活状态");
    }
    else
    {
        Debug.Log("存在未激活的按钮");
    }
}

方案2:Linq一次性判断(写法最简洁)

引入System.Linq命名空间后,可直接调用All方法实现一次性判断,内部已做提前终止遍历的优化:

using System.Linq; // 需提前引入该命名空间
public Button[] bts;

public void StateButton()
{
    // 一次性判断所有按钮是否都满足interactable为true的条件
    bool allInteractable = bts.All(button => button.interactable);
    if (allInteractable)
    {
        Debug.Log("所有按钮都处于激活状态");
    }
    else
    {
        Debug.Log("存在未激活的按钮");
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 06:54:03