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

如何在for循环外执行if判断来决定循环内调用函数传入数组元素还是单变量

解决方案

以下是几种无冗余判断的实现方案,均只在for循环外执行一次条件判断:

方案1:预定义取值委托(最通用,代码简洁)

提前在循环外定义参数获取委托,循环内直接调用即可,委托调用开销远低于重复判断的开销,绝大多数场景下优先使用。
示例代码:

// 此处ResizeParam替换为ForcedResize的实际元素类型,fixedResize替换为你的单变量名
Func<int, ResizeParam> getResizeParam;
if (你的判断条件)
{
    getResizeParam = i => ForcedResize[i];
}
else
{
    getResizeParam = i => fixedResize;
}

for (int i = 0; i < CurrentVerticalList.Count; i++)
{
    GuiGeneral CGroup = CurrentVerticalList[i];
    // 直接调用预定义的委托获取参数
    CGroup.ResizeUsingStandard(getResizeParam(i));

    for (int j = 0; j < 2; j++)
    {
        GlobalListIndex[j]++;
    }
    CGroup.MoveElementTo(CCoord, false);
    CCoord.y += CGroup.ElementRect.WidthHeight.y;
}

方案2:公共逻辑抽离(极致性能无额外开销)

如果对性能要求极高,不想承担任何委托调用开销,可以将循环内的公共逻辑抽为独立方法,仅在外部判断后走不同的循环分支,无业务逻辑重复。
首先抽离公共处理逻辑:

// 注意参数传递规则,引用类型/值类型按实际需求调整修饰符
private void ProcessGroup(GuiGeneral group, ref Coord CCoord, int[] GlobalListIndex)
{
    for (int j = 0; j < 2; j++)
    {
        GlobalListIndex[j]++;
    }
    group.MoveElementTo(CCoord, false);
    CCoord.y += group.ElementRect.WidthHeight.y;
}

外部判断后执行对应逻辑:

if (你的判断条件)
{
    for (int i = 0; i < CurrentVerticalList.Count; i++)
    {
        GuiGeneral CGroup = CurrentVerticalList[i];
        CGroup.ResizeUsingStandard(ForcedResize[i]);
        ProcessGroup(CGroup, ref CCoord, GlobalListIndex);
    }
}
else
{
    for (int i = 0; i < CurrentVerticalList.Count; i++)
    {
        GuiGeneral CGroup = CurrentVerticalList[i];
        CGroup.ResizeUsingStandard(fixedResize);
        ProcessGroup(CGroup, ref CCoord, GlobalListIndex);
    }
}

方案3:简化语法糖(C# 10及以上版本支持)

可以用三元表达式一行完成委托的赋值,进一步简化代码:

// 一行完成条件判断和取值逻辑绑定
var getResizeParam = 你的判断条件 ? (Func<int, ResizeParam>)(i => ForcedResize[i]) : i => fixedResize;
// 循环内调用方式和方案1完全一致

注意事项

使用数组下标的场景建议在循环外提前校验ForcedResize.Length >= CurrentVerticalList.Count,避免运行时出现索引越界异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 12:48:01