我将相同类型的列表传递给json文件,但是如果json找到一个节点,它期望数据在其中,那么我有问题我在使用concat
函数,但列表将并不总是对它们进行评估,所以我不需要能够动态地构建列表。
List<Asset> AllAssets = allAssets.Concat(_vheiclesList)
.Concat(_propertyList)
.Concat(_securedLoansAssets)
.Concat(_allSavings)
.Concat(_allPensions)
.Concat(_allOtherAssets)
.ToList();
例如,如果没有属性或节省,则列表连接将如下所示。
List<Asset> AllAssets = allAssets.Concat(_vheiclesList)
.Concat(_securedLoansAssets)
.Concat(_allPensions)
.Concat(_allOtherAssets)
.ToList();
每个列表都是asset
类型,然后我还需要能够告诉json删除这些,所以我需要一种方法通过if语句添加每个列表以检查{{1然后不要把它连接起来。
答案 0 :(得分:1)
您可以使用扩展方法来处理列表的null
值。 E.g。
public static class EnumerableExtension
{
public static IEnumerable<TSource> ConcatOrDefault<TSource>(this IEnumerable<TSource> first, IEnumerable<TSource> second)
{
if (second == null)
return first;
return first.Concat(second);
}
}
然后你可以将你的陈述重写为
List<Asset> AllAssets = allAssets.ConcatOrDefault(_vheiclesList)
.ConcatOrDefault(_propertyList)
.ConcatOrDefault(_securedLoansAssets)
.ConcatOrDefault(_allSavings)
.ConcatOrDefault(_allPensions)
.ConcatOrDefault(_allOtherAssets)
.ToList();
现在,_propertyList
或_allSavings
等值可能为空。在这种情况下,只返回未改变的序列。
答案 1 :(得分:0)
你可以通过构造一个数组数组,然后过滤掉空数组(Where),然后将剩余的数组展平成一个数组(SelectMany)来实现。
List<Asset> AllAssets = new[]
{
allAssets,
_vheiclesList,
_propertyList,
_securedLoanAssets,
_allSavings,
_allPensions,
_allOtherAssets,
}
.Where(x => x != null)
.SelectMany(x => x)
.ToList();
答案 2 :(得分:0)
最小变化解决方案可能是使用空合并运算符:
List<Asset> AllAssets = allAssets
.Concat(_vheiclesList ?? Enumerable.Empty<Asset>())
.Concat(_propertyList ?? Enumerable.Empty<Asset>())
.Concat(_securedLoansAssets ?? Enumerable.Empty<Asset>())
.Concat(_allSavings ?? Enumerable.Empty<Asset>())
.Concat(_allPensions ?? Enumerable.Empty<Asset>())
.Concat(_allOtherAssets ?? Enumerable.Empty<Asset>())
.ToList();