gpt4 book ai didi

c# - 如果数组为空,LINQ 返回 null

转载 作者:太空狗 更新时间:2023-10-29 20:56:25 26 4
gpt4 key购买 nike

public class Stuff
{
public int x;
// ... other stuff
}

我有一个 IEnumerable<Stuff>我想 build 一个 int[]所有的 x所有 Stuff 的属性集合中的对象。

我愿意:

IEnumerable<Stuff> coll;
// ...
var data = coll.Select(s => s.x).ToArray();

我想要的是空数组而不是 int[0]如果集合为空。换句话说,如果 !coll.Any() , 那么我要 data = null . (我的实际需求是 coll 是一个复杂的 LINQ 表达式的中间结果,我想在表达式链上使用 LINQ 操作,而不是保存中间结果)

我知道int[0]null更可取在许多情况下,但我存储了许多这些结果,并且更愿意传递 nulls而不是空数组。

所以我目前的解决方案是这样的:

var tmp = coll.Select(s => s.x).ToArray();
int[] data = tmp.Any() ? tmp : null;

不存储 tmp 的任何方法?

编辑:主要问题是如何在不存储中间结果的情况下执行此操作。类似于 NULLIF()来自 T-SQL如果条件为假,你在哪里取回你传入的内容,以及 NULL如果条件为真。

最佳答案

如果你经常这样做,你可以写一个扩展方法:

public static class IEnumerableExt
{
public static T[] ToArrayOrNull<T>(this IEnumerable<T> seq)
{
var result = seq.ToArray();

if (result.Length == 0)
return null;

return result;
}
}

那么您的调用代码将是:

var data = coll.Select(s => s.x).ToArrayOrNull();

关于c# - 如果数组为空,LINQ 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28611083/

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