C# 列表在嵌套列表中的位置在排序时更改

C# 列表在嵌套列表中的位置在排序时更改,c#,.net,list,sorting,nested-lists,C#,.net,List,Sorting,Nested Lists,我有一个嵌套列表,里面有4个列表 ListOflist has: list[0] contains Id list[1] contains power values list[2] contains count values. 我正在尝试此函数以升序对列表进行排序: bool ascending = true; // ascending int mult = ascending ? 1 : -1; listoflist.Sort(

我有一个嵌套列表,里面有4个列表

ListOflist has: list[0] contains Id
                list[1] contains power values
                list[2] contains count values.
我正在尝试此函数以升序对列表进行排序:

bool ascending = true; // ascending
int mult = ascending ? 1 : -1;
listoflist.Sort((a, b) => mult * a[2].CompareTo(b[2]));
目标是根据计数值排列列表列表,即字段2。 当我尝试在排序后显示列表列表时,列表[0]不包含ID,而是包含不同的值,并且嵌套列表中列表的顺序已更改


你知道我犯的错误是什么吗?

这是因为你实际上是值而不是对象-尝试使用自定义对象:

 class Data
        {
            public string Id { get; set; }
            public long Power { get; set; }
            public int Count { get; set; }
        }

        var listoflist = new List<Data>
        {
            new Data {Id = "#1", Power = 2, Count = 10},
            new Data {Id = "#2", Power = 3, Count = 2},
            new Data {Id = "#3", Power = 4, Count = 5}
        };

        var ascending = true; // ascending
        var mult = ascending ? 1 : -1;

        listoflist.Sort((a, b) => mult * a.Count.CompareTo(b.Count));
类数据
{
公共字符串Id{get;set;}
公共长幂{get;set;}
公共整数计数{get;set;}
}
var listoflist=新列表
{
新数据{Id=“#1”,幂=2,计数=10},
新数据{Id=“#2”,幂=3,计数=2},
新数据{Id=“#3”,幂=4,计数=5}
};
var升序=真;//提升
var mult=升序?1 : -1;
排序((a,b)=>mult*a.Count.CompareTo(b.Count));

我不知道为什么使用列表列表而不是对象列表,但在这种情况下,可以使用LINQ(尽管它在内存中添加了一个额外的列表实例)


为什么对属性使用
列表
?使用具有属性
Id
Power
Count
属性的类,并将实例存储在
列表中
不清楚您想要实现什么。你能提供一个有理想结果的样品吗?我认为您不想排序,而是创建不同的列表。
   bool ascending = true;
   if (ascending)
       listoflist= listoflist.OrderBy(l => l[2]).ToList();
   else
       listoflist = listoflist.OrderByDescending(l => l[2]).ToList();