道歉,如果这是一个重复的问题,我认为这可能是我找不到我要找的答案。
在我的列表中,我需要按列表中对象的名称进行排序。例如,如果在cars
列表中,我有对象Volvo
,Ford
,BMW
,Audi
,Ferrari
和{{ 1}}在那个顺序中,我需要它来订购对象Lamborghini
然后Audi
等。
我尝试过BMW
,但这并没有奏效。有没有人有任何解决方案
编辑:我需要按以下顺序排序(因敏感数据而隐藏其他元素):
所以在.OrderBy(x => nameof(x))
上有一个名为" Aaa"例如,它需要是此列表中的第一个元素。
答案 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();
}