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
相关产品推荐
相关产品推荐

