C# LINQ 如何按label取Field的value赋值给MyClass的Temp属性
代码修正方案
当前编写的LINQ存在两处编译/逻辑问题:
x.fields.Where(a => a.label == "Label")会返回Field对象集合,无法直接赋值给bool类型的Temp属性,需要提取对应项的value字段- 从Field中拿到的
value是字符串类型,需要转换为布尔类型,同时要处理找不到匹配label项时的空值场景
修正后代码
// ToList()返回的是List<MyClass>,变量类型要和返回值匹配避免编译报错 List<MyClass> myClassList = JSONResponse.data.presences.Select(x => new MyClass() { Id = Convert.ToInt32(x.id), Name = x.name, Temp = Convert.ToBoolean( // 定位匹配指定label的单个Field项,取它的value x.fields.FirstOrDefault(field => field.label == "替换为你实际的匹配label值")?.value // 找不到匹配项时给默认值,避免空引用导致的运行时报错 ?? "false" ) }).ToList();
调整说明
- 用
FirstOrDefault替换Where:每个label和Field是一一对应的场景下,直接取单个匹配项即可,不需要返回整个集合 - 增加空值兜底:通过空条件运算符判断匹配项是否存在,无匹配时提供可转换为bool的默认字符串,不会触发空引用异常
- 把代码里占位的
"Label"替换为业务中实际需要匹配的label字符串值即可
内容的提问来源于stack exchange,提问作者lpernice
相关产品推荐
相关产品推荐

