如何正确实现IEnumerable以将要优先排序的项归为属性?

问题描述 投票:0回答:1

我的目标是从与Foo枚举条件匹配的foos列表中返回第一个Boo项,如果没有项匹配,则应按示例中的Boo值进行优先级排序条件,然后只返回第一项。

模型:

class Foo 
{
    E_Boo Boo { get; set; }
}
enum E_Boo
{
    Undefined = 0,
    Jessie = 1,
    Abby = 2,
    Felix = 3,
    Lacey = 4,
    Lucia = 5,
    Anisa = 6    
}

这是我尝试过的,它有效:

    public Foo GetFooByBooPriority(IEnumerable<Foo> foos)
    {
        if(foos.Any(x => x.Boo == E_Boo.Abby))
            return foos.First(x => x.Boo == E_Boo.Abby);
        else if (foos.Any(x => x.Boo == E_Boo.Lacey))
            return foos.First(x => x.Boo == E_Boo.Lacey);
        else if (foos.Any(x => x.Boo == E_Boo.Lucia))
            return foos.First(x => x.Boo == E_Boo.Lucia);
        else if (foos.Any(x => x.Boo == E_Boo.Felix))
            return foos.First(x => x.Boo == E_Boo.Felix);
        else if (foos.Any(x => x.Boo == E_Boo.Anisa))
            return foos.First(x => x.Boo == E_Boo.Anisa);
        else if (foos.Any(x => x.Boo == E_Boo.Jessie))
            return foos.First(x => x.Boo == E_Boo.Jessie);
        else
            return foos.First();
    }

任何想法如何在性能和更简洁的代码方面改进此优先级检索器?

更新:

在优先级逻辑中需要与枚举E_Boo定义脱钩,换句话说,如果将更改枚举定义,则优先级逻辑应保留为smae。

c# .net-core ienumerable
1个回答
2
投票

我想使实现与枚举值和名称脱钩

© www.soinside.com 2019 - 2024. All rights reserved.