gpt4 book ai didi

c# - 用于将具有非空值的多个属性收集到集合中的简洁 C# 代码?

转载 作者:行者123 更新时间:2023-11-30 18:57:53 24 4
gpt4 key购买 nike

更改的一个相当基本的问题。给定这样一个类:

public class X
{
public T A;
public T B;
public T C;
...

// (other fields, properties, and methods are not of interest here)
}

我正在寻找一种简洁的方法来编写一个方法,该方法将返回所有 ABC.. . 在可枚举集合中不为空。 (假设将这些字段声明为数组不是一种选择。)

public IEnumerable<T> GetAllNonNullABCs(this X x)
{
// ?
}

这个方法的明显实现是:

public IEnumerable<T> GetAllNonNullABCs(this X x)
{
var resultSet = new List<T>();

if (x.A != null) resultSet.Add(x.A);
if (x.B != null) resultSet.Add(x.B);
if (x.C != null) resultSet.Add(x.C);
...

return resultSet;
}

这里特别困扰我的是代码看起来冗长和重复,而且我不知道初始的 List 容量。

我希望有一个更聪明的方法,可能涉及 ?? 运算符?有什么想法吗?


关于所选答案的注意事项:

我终于选择了两者的混合 Bryan Watts'dtb's允许明确区​​分属性集 ABC... 的答案以及非空子集的过滤:

(1) 包含字段/属性集的定义:

IEnumerable<T> AllABCs(this X x)
{
return new[] { x.A, x.B, x.C, ... };
}

或者:

IEnumerable<T> AllABCs(this X x)
{
yield return x.A;
yield return x.B;
yield return x.C;
...
yield break;
}

(2) 只返回非空值:

IEnumerable<T> ThatAreNotNull(this IEnumerable<T> enumerable)
{
return enumerable.Where(item => item != null);
}

IEnumerable<T> AllNonNullABCs(this X x)
{
return AllABCs().ThatAreNotNull();
// ^^^^^^^^^^^^^^^^^^^^^^^^^^
// goal reached; it won't get shorter and clearer than this, IMO!
}

最佳答案

public static IEnumerable<T> GetAllNonNullAs(this X x)
{
return new[] { x.A, x.B, x.C }.Where(t => t != null);
}

关于c# - 用于将具有非空值的多个属性收集到集合中的简洁 C# 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2893481/

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