C#新手求教:如何访问多层自定义类型集合中的嵌套属性?
正确判断集合中是否存在指定元素的实现方法
你遇到的问题是item.Properties是集合类型(ICollection<Property>),不能直接像单个对象那样访问Owner属性。要判断集合里是否存在满足条件的元素,应该用LINQ的Any()方法,这是最简洁高效的方式。
正确实现代码
foreach (var item in ListItem) { // 直接判断集合中是否存在Owner为"abc"的Property元素 if (item.Properties.Any(p => p.Owner == "abc")) { // 执行你的逻辑 } }
为什么之前的Select没成功?
Select(s => s.Owner)的作用是把集合里每个Property的Owner提取出来,生成一个IEnumerable<string>的字符串集合,但它只是做了数据投影,并没有帮你判断是否存在目标值。如果一定要用Select,后续需要配合Contains,但这种写法不如直接用Any高效:
// 不推荐,多了一步投影操作 if (item.Properties.Select(p => p.Owner).Contains("abc")) { // 执行逻辑 }
额外注意事项
- 确保你的项目已经引用了
System.Linq命名空间(在代码文件顶部添加using System.Linq;),否则LINQ方法会无法使用。 - 如果
item.Properties可能为null,建议先做空值判断,避免空引用异常:
if (item.Properties != null && item.Properties.Any(p => p.Owner == "abc")) { // 执行逻辑 }
内容的提问来源于stack exchange,提问作者scytaleqc
相关产品推荐
相关产品推荐

