gpt4 book ai didi

c# - 如果结果为空,IEnumerable.FirstOrDefaultAsync( predicate )?.ContinueWith() 是否返回?

转载 作者:太空宇宙 更新时间:2023-11-03 22:32:16 27 4
gpt4 key购买 nike

我正在编写一段使用 .FirstOrDefaultAsync() LINQ 方法的代码。我知道通常如果你在一个表达式中使用它,使用 none async 方法,然后使用 ? 返回而不评估其余的方法调用。

例。 Suedo 代码

class Item = {
string Name
string Value
}

items = Item[]

var result = items.FirstOrDefault(item => item.Name == "Item One")?.Value;

如果 list 不包含名为“Item One”的 item,则结果将为 null 和一个 exception 不会被抛出,因为 null 没有属性 Value

我想异步执行相同的操作,这行得通吗:

list.FirstOrDefaultAsync(item => item.Name == "Item One")?
.ContinueWith(result => result.Result.Value);

如果没有找到这样的项目,这是否会在不评估 ContinueWith() 的情况下直接返回?还是 ? 不能以这种方式异步工作?

最佳答案

您显示的代码将不起作用,因为它正在检查 FirstOrDefaultAsync 返回的 Task 是否为 null - 它永远不会。此外,ContinueWith 过度扩展,因为它的主要用途是链接异步操作。提取值不是异步的,所以为什么不呢

var item = await list.FirstOrDefaultAsync(item => item.Name == "Item One");
var result = item?.Value;

如果你愿意,你可以单行

var result = (await list.FirstOrDefaultAsync(item => item.Name == "Item One"))?.Value;

关于c# - 如果结果为空,IEnumerable.FirstOrDefaultAsync( predicate )?.ContinueWith() 是否返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56901455/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com