能否通过含RecordId属性的Record列表枚举初始化int类型List?
关于用对象枚举初始化int类型List的问题
嘿,这个问题我来给你掰扯清楚~你想从List<Record>里提取所有RecordId来初始化List<int>的思路是对的,但你写的那行代码可没法实现需求,甚至还会出问题,我给你拆解下:
你的写法为啥不行?
records.GetEnumerator().Current.RecordId这个操作有两个大问题:
- 刚获取枚举器的时候,
Current属性是未定义状态,必须先调用MoveNext()方法才会指向第一个元素,直接访问会出问题; - 就算你调用了
MoveNext(),这行代码也只能拿到第一个元素的RecordId,没法遍历整个列表提取所有ID。
正确的实现方式
这里给你两种常用的靠谱方法:
1. 用LINQ(最简洁推荐)
只要引用System.Linq命名空间,一行代码就能搞定,它会自动遍历所有Record对象并提取RecordId:
// 确保records不为null哦 List<int> recordIds = records.Select(record => record.RecordId).ToList();
2. 手动foreach循环(适合不想用LINQ的场景)
如果不想依赖LINQ,用基础的循环也能实现:
List<int> recordIds = new List<int>(); if (records != null) // 先做null检查避免报错 { foreach (var record in records) { recordIds.Add(record.RecordId); } }
额外提醒
一定要注意records是否为null!如果records是null,直接调用Select或者foreach都会抛出NullReferenceException。如果需要处理null情况,可以用空合并运算符优化:
List<int> recordIds = records?.Select(r => r.RecordId).ToList() ?? new List<int>();
这样就算records是null,也会返回一个空的List<int>,不会报错。
内容的提问来源于stack exchange,提问作者samus
相关产品推荐
相关产品推荐

