gpt4 book ai didi

带有默认值的 C# LINQ SelectMany

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

我正在寻找一种优雅的解决方案,以将集合中的子集合聚合到一个大集合中。我的问题是某些子集合何时可能为空。

如:

var aggregatedChildCollection = parentCollection.SelectMany(x=> x.ChildCollection);

如果任何子集合对象为空,这将引发异常。一些替代方案是:

// option 1
var aggregatedChildCollection = parentCollection
.Where(x=>x.ChildCollection != null)
.SelectMany(x => x.ChildCollection);

// option 2
var aggregatedChildCollection = parentCollection
.SelectMany(x => x.ChildCollection ?? new TypeOfChildCollection[0]);

两者都可以,但我正在对父级的相当多的子集合执行特定操作,这变得有点笨拙。

我想要的是创建一个扩展方法来检查集合是否为空,如果是则执行选项 2 的操作 - 添加一个空数组。但是我对 Func 的理解还没有达到知道如何编写此扩展方法的程度。我知道我想要的语法是这样的:

var aggregatedChildCollection = parentCollection.SelectManyIgnoringNull(x => x.ChildCollection);

是否有一种简单的扩展方法可以实现这一点?

最佳答案

您可以使用自定义扩展方法:

public static IEnumerable<TResult> SelectManyIgnoringNull<TSource, TResult>(
this IEnumerable<TSource> source,
Func<TSource, IEnumerable<TResult>> selector)
{
return source.Select(selector)
.Where(e => e != null)
.SelectMany(e => e);
}

然后像这样使用:

var aggregatedChildCollection = parentCollection
.SelectManyIgnoringNull(x => x.ChildCollection);

关于带有默认值的 C# LINQ SelectMany,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39338896/

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