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

C#中如何以更地道方式实现带索引的List.All元素验证?

实现带索引的集合全验证(C#)

方法一:自定义扩展方法(最推荐)

给IEnumerable<T>实现一个带索引参数的All扩展方法,完全复用原生All的调用体验,是最地道的解决方案:

public static class EnumerableExtensions
{
    public static bool All<T>(this IEnumerable<T> source, Func<T, int, bool> predicate)
    {
        if (source == null)
            throw new ArgumentNullException(nameof(source));
        if (predicate == null)
            throw new ArgumentNullException(nameof(predicate));
            
        int index = 0;
        foreach (var item in source)
        {
            if (!predicate(item, index))
                return false;
            index++;
        }
        return true;
    }
}

调用时和你最初设想的代码完全一致:

bool result = list.All((element, index) => 
    element != null && index % 2 == 0);

这个方法复用性极强,整个项目都能像调用原生LINQ方法一样使用,完全符合C#的设计风格。

方法二:简化现有LINQ写法

如果不想新增扩展方法,可以把冗余的All(identity => identity)简化为更紧凑的形式,逻辑和你原代码一致,但可读性更好:

bool result = list.Select((element, index) => 
    element != null && index % 2 == 0)
    .All(x => x);

方法三:手动循环(性能最优)

如果操作的是List<T>,直接使用for循环可以避免LINQ的委托调用开销,性能更优,尤其是处理大型集合时:

bool result = true;
for (int i = 0; i < list.Count; i++)
{
    var element = list[i];
    if (!(element != null && i % 2 == 0))
    {
        result = false;
        break;
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 19:51:05