手动订购列表C#?

son*_*ony 2 c#

我有一份成分列表,其中包含成分名称和相应的值.我想根据预先定义的顺序排序.

 List<Ingredients> frmltnIngredientsList = new List<Ingredients>
Run Code Online (Sandbox Code Playgroud)

该列表最多可包含10条记录.前四个记录应按以下顺序排列:

  • 蛋白
  • 纤维

其余的可以按任何顺序排列

Dav*_*und 13

你可以这样做:

frmltnIngredientsList.OrderBy(item =>
   item.Name == "Protein" ? 1 :
   item.Name == "oil" ? 2 :
   item.Name == "Fibre" ? 3 : 
   item.Name == "Ash" ? 4 :
   5);
Run Code Online (Sandbox Code Playgroud)

OrderBy通话将产生IOrderedEnumerable<Ingredient>.所以你需要将它分配给变量,

var orderedList = frmltnIngredientsList.OrderBy(item => ...);
Run Code Online (Sandbox Code Playgroud)

...或者调用ToList()以将其分配给您的List<Ingredient>类型变量:

frmltnIngredientsList = frmltnIngredientsList.OrderBy(item => ...).ToList();
Run Code Online (Sandbox Code Playgroud)

它当然可以整理一下.您可以SortOrderIngredient列表中拥有一个属性并运行.OrderBy(x => x.SortOrder),或者至少可以将逻辑移出视线:

public static class IngredientExtensions
{
    public static int GetSortNumber(this Ingredient item) {
       return item.Name == "Protein" ? 1 :
          item.Name == "oil" ? 2 :
          item.Name == "Fibre" ? 3 : 
          item.Name == "Ash" ? 4 : 
          5;
    }
}

...

var orderedList = frmltnIngredientsList.OrderBy(item => item.GetSortNumber());
Run Code Online (Sandbox Code Playgroud)