gpt4 book ai didi

c# - Linq "Select"完整性问题

转载 作者:行者123 更新时间:2023-11-30 14:17:29 25 4
gpt4 key购买 nike

我的逻辑类似于下面的代码。似乎为了检查这样的空引用,我必须有两个单独的 Select 语句。 linq 忍者能告诉我可以用哪种方式改进这样的查询吗?

List<C> cList = Globals.GetReferences(irrelevantThing) // GetReferences returns List<A>, which are references to B
.Select(a => a.GetB()) // GetB returns type B, can be null
.Where(b => b != null && someOtherConditions)
.Select(c => new C(b)) // C Constructor cannot have a null parameter
.ToList();

谢谢。

编辑:稍微清理了示例代码。

最佳答案

好吧,一方面我会更改参数名称 - 在第一个 Select 之后,您得到了一个 B,那么为什么不将其命名为 b

List<B> bList = Globals.GetReferences(irrelevantThing)
.Select(a => a.GetB()) // GetB returns type B, can be null
.Where(b => b != null && someOtherConditions)
.Select(b => new B(b))
.ToList();

到那时,我想知道为什么你有第二个 Select ......你已经有一个 B,那么你为什么要创建一个新的? B(B old) 构造函数的作用是什么?

如果您确实需要其他选择,我觉得没问题。我的意思是,如果 GetB 很便宜,您总是可以使用:

List<B> bList = Globals.GetReferences(irrelevantThing)
.Where(a => a.GetB() != null && someOtherConditions)
.Select(a => new B(a.GetB()))
.ToList();

...但老实说,我不确定我会。

关于c# - Linq "Select"完整性问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5805035/

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