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

C#实现:list2为空或list1元素不在list2中时将X设为0

解决C#中list2为空或list1元素不在list2时设置X为0的问题

我来帮你搞定这个问题哈~首先得先修正原代码里的一个小语法错误:List2类的Age属性定义跑到类外面去了,这会导致编译失败,得先把它挪到类内部。然后针对你提到的两个场景——list2为空,或者list1里的Name在list2中找不到对应项——我们要确保变量X都能被设为0,同时还要避免空引用异常。

修改后的完整代码

class Program 
{
    static void Main(string[] args) 
    {
        var list1 = new List<List1> 
        { 
            new List1 { Name = "A1" }, 
            new List1 { Name = "A2" } 
        };
        
        // 模拟list2为空的情况可以解开下面的注释,注释掉正常的list2初始化
        // var list2 = null;
        var list2 = new List<List2> 
        { 
            new List2 { Name = "A1", Age = 10 } 
        };

        foreach (var a in list1) 
        {
            // 先处理list2为空的场景,直接设X为0
            if (list2 == null)
            {
                var X = 0;
                // 这里可以添加X的使用逻辑,比如Console.WriteLine(X);
                continue;
            }
            
            // 查找list2中匹配当前Name的元素
            var matchedItem = list2.FirstOrDefault(x => x.Name == a.Name);
            // 找不到匹配项时X设为0,否则取对应Age值
            var X = matchedItem == null ? 0 : matchedItem.Age;
            
            // 可以在这里添加对X的使用,比如打印结果验证
            Console.WriteLine($"Name: {a.Name}, X: {X}");
        }
    }
}

public class List1 
{
    public string Name { get; set; }
}

public class List2 
{
    public string Name { get; set; }
    public int Age { get; set; } // 修正:把Age属性放到List2类内部
}

关键逻辑说明

  • 处理list2为空:通过if (list2 == null)直接判断,满足条件时给X赋值0;
  • 处理找不到匹配项:用FirstOrDefault()查找匹配元素,返回null就代表没有找到对应项,这时给X赋值0,否则取元素的Age属性;
  • 避免空引用异常:原代码中直接访问list2.Where(...).FirstOrDefault().Age,当找不到元素时会因为FirstOrDefault()返回null而抛出空引用异常,现在先把匹配元素存到变量里再判断,彻底避免了这个问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:48:29