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

如何在单元测试中访问多维列表元素并比较?遇SingleOrDefault报错

问题分析与解决

错误原因

你遇到的System.InvalidOperationException是因为SingleOrDefault()方法的特性:它要求目标序列只能有0个或1个元素,但你的filteredResults列表中存在多个元素,所以触发了这个异常。

满足需求的正确代码

你的需求是检查列表中是否存在savingsGasPerYear == 1的元素,若存在则测试失败。应该用Any()方法来判断是否存在符合条件的元素,代码修改如下:

List<CalculationResult> results = CheckStepSix();
List<CalculationResult> filteredResults = filterCalculations(results);

Console.WriteLine($"{filteredResults.Count} results");

// 检查是否有任意元素的savingsGasPerYear等于1
if (filteredResults.Any(r => r.savingsGasPerYear == 1))
{
    Console.WriteLine("error");
    Assert.Fail();
}
else
{
    Console.WriteLine("success");
}

如何访问列表中的元素

针对List<CalculationResult>这类列表,常见的元素访问方式有三种:

1. 遍历所有元素

用foreach循环逐个处理每个元素:

foreach (var result in filteredResults)
{
    // 访问当前元素的属性
    var gasSavings = result.savingsGasPerYear;
    Console.WriteLine($"年度节油:{gasSavings}");
}

2. 通过索引访问指定位置的元素

列表是有序集合,元素索引从0开始,可以直接通过下标取值:

// 确保列表不为空,避免索引越界
if (filteredResults.Count > 0)
{
    // 获取第一个元素
    var firstResult = filteredResults[0];
    Console.WriteLine(firstResult.savingsGasPerYear);
    
    // 获取第三个元素(索引为2)
    if (filteredResults.Count > 2)
    {
        var thirdResult = filteredResults[2];
    }
}

3. 查找单个符合条件的元素

如果需要找到第一个符合条件的元素(或判断是否存在),可以用FirstOrDefault()(不会因多个元素抛异常):

// 找到第一个savingsGasPerYear等于1的元素,不存在则返回null
var target = filteredResults.FirstOrDefault(r => r.savingsGasPerYear == 1);
if (target != null)
{
    // 存在符合条件的元素,执行失败逻辑
    Assert.Fail();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 14:20:33