gpt4 book ai didi

c# - 是否可以在单次迭代中延迟加载和类型转换对象?

转载 作者:太空宇宙 更新时间:2023-11-03 19:44:59 25 4
gpt4 key购买 nike

我是 C# 编程的新手,有以下场景。

我正在使用一个返回 IEnumerable 的 API,我想根据一些对象属性对其进行迭代:

IEnumerable<objects> listOfObjects = filter.getItems(id);
List<CustomObject> sortedList = new List<CustomObject>();
foreach (CustomObject obj in listOfObjects )
{
obj.Load(Load.Expanded);
sortedList.Add(obj);
}
foreach (CustomObject custObj in sortedList.OrderByDescending(c => c.RevisionDate))
{
// business logic
}

我需要执行以上所有操作,因为我无法对过滤器查询中返回的对象进行类型转换。此外,未加载从过滤器查询返回的对象,这意味着如果我不执行第一个 foreach 循环,则第二个 foreach 中的 RevisionDate 值将为空。

我想知道是否有更好的方法来处理这种情况,是否可以通过 1 个循环消除这些行数?

最佳答案

您可以像这样在一个 linq 语句中完成:

foreach (var custObj in listOfObjects
.Cast<CustomObject>()
.Select(obj => {obj.Load(); return obj;})
.OrderByDescending(c => c.RevisionDate))

请注意 Select 的这种用法通常不鼓励这样做,这不是一个很好的做法(有一些副作用,比如 obj.Load 中的 Select 就是这样)。

关于c# - 是否可以在单次迭代中延迟加载和类型转换对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46892632/

25 4 0
文章推荐: c# - 没有 I/O 的异步/等待
文章推荐: css - div CSS 上的右 Angular 丝带
文章推荐: c# - 无法删除 arraylist 中的项目
文章推荐: html - 如何在不弄乱边框的情况下将
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com