根据列表中对象的名称对列表进行排序?

时间:2016-12-13 09:48:12

标签: c#

道歉,如果这是一个重复的问题,我认为这可能是我找不到我要找的答案。

在我的列表中,我需要按列表中对象的名称进行排序。例如,如果在cars列表中,我有对象VolvoFordBMWAudiFerrari和{{ 1}}在那个顺序中,我需要它来订购对象Lamborghini然后Audi等。

我尝试过BMW,但这并没有奏效。有没有人有任何解决方案

编辑:我需要按以下顺序排序(因敏感数据而隐藏其他元素):

screenshot of code

所以在.OrderBy(x => nameof(x))上有一个名为" Aaa"例如,它需要是此列表中的第一个元素。

2 个答案:

答案 0 :(得分:1)

您应该为该列表中的每个实例使用Name - 属性,而不是依赖于集合中的变量名称:

class Car
{
    public string Name { get; set; }
    // ...
}

现在,在您的消费代码中,您可以轻松使用此属性:

var myList = new List<Car> { 
    new Car { Name = "BMW" },
    new Car { Name = "Audi" }
}:
var result = myList.OrderBy(x => x.Name);

正如Abion47和我已经提到的那样,变量的名称对于程序集没有意义,只是在你的酸代码中。解组装配时,您会看到名称被随机的虚拟名称替换。所以依靠这些名字并不是一个好主意。

答案 1 :(得分:0)

以下是使用IComparer接口的方法之一。

//实施IComparer

    public  class Cars
    {
       string Name { get; set; }   
    }

    public class SortByName : IComparer<Cars>
    {    
      public int Compare(Cars first, Cars next)
         {
           return first.Name.CompareTo(next.Name);
         }
     }

//主要方法

        static void Main(string[] args)
        {
            Cars one = new Cars { Name = "Ford" };
            Cars two = new Cars { Name = "Audi" };
            Cars three = new Cars { Name = "Lamborghini" };
            Cars four = new Cars { Name = "Ferrari" };

            List<Cars> _lstCars = new List<Cars>();
            _lstCars.Add(one);
            _lstCars.Add(two);
            _lstCars.Add(three);
            _lstCars.Add(four);
            SortByName sortbyname = new SortByName();
            _lstCars.Sort(sortbyname);
            Console.WriteLine("Result After sorting by name");
            foreach (var item in _lstCars)
            {
                Console.WriteLine(item.Name);
                Console.WriteLine();
            }
            Console.Read();
        }