Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何对通用列表Asc或Desc进行排序?_C#_.net_Asp.net_Generics_Sorting - Fatal编程技术网

C# 如何对通用列表Asc或Desc进行排序?

C# 如何对通用列表Asc或Desc进行排序?,c#,.net,asp.net,generics,sorting,C#,.net,Asp.net,Generics,Sorting,我有一个类型为MyImageClass的泛型集合,MyImageClass有一个布尔属性“IsProfile”。我想对这个通用列表进行排序,其中IsProfile==true位于列表的开头 我试过这个 rptBigImages.DataSource = estate.Images.OrderBy(est=>est.IsProfile).ToList(); 在上面的代码中,图像位于最后一个IsProfile属性为true的位置。 但我希望它位于第一个索引处。我需要一些Asc或Desc。然后

我有一个类型为MyImageClass的泛型集合,MyImageClass有一个布尔属性“IsProfile”。我想对这个通用列表进行排序,其中IsProfile==true位于列表的开头

我试过这个

rptBigImages.DataSource = estate.Images.OrderBy(est=>est.IsProfile).ToList();
在上面的代码中,图像位于最后一个IsProfile属性为true的位置。 但我希望它位于第一个索引处。我需要一些Asc或Desc。然后我做了这个

rptBigImages.DataSource = estate.Images.OrderBy(est=>est.IsProfile).Reverse.ToList();
有没有更简单的方法

谢谢

那么:

estate.Images.OrderByDescending(est => est.IsProfile).ToList()

这将按IsProfile属性按降序排列图像,然后根据结果创建一个新列表。

您可以使用.OrderByDescending(…)-但请注意,使用LINQ方法创建的是一个新的有序列表,而不是对现有列表进行排序

如果您有一个
列表
,并且希望对现有的列表重新排序,那么您可以使用
排序()
-并且可以通过添加一些扩展方法使排序更容易:

static void Sort<TSource, TValue>(this List<TSource> source,
        Func<TSource, TValue> selector) {
    var comparer = Comparer<TValue>.Default;
    source.Sort((x,y)=>comparer.Compare(selector(x),selector(y)));
}
static void SortDescending<TSource, TValue>(this List<TSource> source,
        Func<TSource, TValue> selector) {
    var comparer = Comparer<TValue>.Default;
    source.Sort((x,y)=>comparer.Compare(selector(y),selector(x)));
}
静态无效排序(此列表源、,
Func选择器){
var comparer=comparer.Default;
Sort((x,y)=>comparer.Compare(选择器(x),选择器(y));
}
静态void SortDescending(此列表源,
Func选择器){
var comparer=comparer.Default;
Sort((x,y)=>comparer.Compare(选择器(y),选择器(x));
}

然后你可以使用
list.Sort(x=>x.SomeProperty)
list.SortDescending(x=>x.SomeProperty)

谢谢你的回答,很抱歉我没有必要,我不知道为什么我没有注意intellisense上OrderBy下的单词。再次感谢除了Marc的回答之外,还有其他方法可以对列表进行排序而不是创建新列表吗?您不想使用LINQ或内置的sort()方法进行排序的原因是什么?谢谢Marc,所以如果我使用LINQ进行排序,这是否意味着它会导致性能损失?嗯,很简单,但与数据绑定相比,您永远不会注意到它。这真的很有帮助。是否可以将其扩展为也执行orderby?@Ash,而不是“按原样”,因为它正在执行即时排序。这将需要更多的胶水来做它-比我现在能写的更多。。。