首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何编写基于条件选择的C# LINQ代码

如何编写基于条件选择的C# LINQ代码
EN

Stack Overflow用户
提问于 2020-06-01 12:17:26
回答 1查看 158关注 0票数 0

我希望通过转换方法将一种类型的列表转换为另一种类型,但只有选择性地转换(如果转换结果为空或不为空)。它显示在下面的代码中。

代码语言:javascript
复制
private List<B> GetBList(List<A> aList)
{
    List<B> bList = new List<B>();
    foreach (A a in aList)
    {
        B b = GetB(a);
        if (b != null)
        {
            bList.Add(b);
        }
    }
    return bList;
}

private B GetB(A a)
{
    if (a != null)
    {
        return new B();
    }
    return null;
}

有没有一种方法可以用LINQ写成下面这样的东西。下面函数的问题是,即使转换结果为空,它也始终会移动数据。结果必须是数组(B的数组),输入必须是列表(A的列表)。

代码语言:javascript
复制
private B[] GetBList(List<A> aList)
{
    return aList.Select(GetB)?.ToArray() ?? Array.Empty<A>();
}

请提个建议。提前感谢!

EN

回答 1

Stack Overflow用户

发布于 2020-06-01 12:34:58

您可以选择with Select(x => GetB(x)),这将返回转换后的对象。那么你应该用Where(x => x != null)对其进行过滤。然后将其转换为array

请注意,我在aList之后使用?作为aList?.Select,因此当aList对象为null时,它将处理这种情况。

代码语言:javascript
复制
private B[] GetBList(List<A> aList)
{
    return aList?.Select(x => GetB(x)).Where(x => x != null).ToArray() ?? Array.Empty<B>();
}

编辑如果也使用Select(GetB),则可以使用Select(x => GetB(x))

代码语言:javascript
复制
private B[] GetBList(List<A> aList)
{
    return aList?.Select(GetB).Where(x => x != null).ToArray() ?? Array.Empty<B>();
}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62125627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档