列出<Uri> .OrderBy()基于Contains()的排序顺序?

McA*_*hey 3 c# collections list

我有一个标准List<Uri>定义,包含一个简短的项目列表.我想使用foreach()迭代列表,但是想要将包含特定字符串值的项"置于顶部"以便首先处理它们.OrderBy()是否可以实现这一点,更好的是,它可以在一行中实现吗?谢谢!

Ree*_*sey 6

你可以这样做:

foreach(var uri in uriList.OrderByDescending(uri => uri.ToString().Contains("foo"))
{
    // Use uri
Run Code Online (Sandbox Code Playgroud)


Bro*_*ass 5

是的。您可以使用OrderByDescending()返回布尔值的订单 - 例如:

var results = items.OrderByDescending( x => x.Name=="Herbert").ToList();
Run Code Online (Sandbox Code Playgroud)

在这种情况下,订单将返回true“Herbert”和false所有其他值。所有true值都将所有false之后排序- 我们通过使用颠倒顺序OrderByDescending()并获得所需的结果。

适应您的Uri列表并且Contains()还返回一个布尔值,这意味着:

foreach(var uri in uriList.OrderByDescending(x => x.ToString().Contains(someString))
{
   //..
}
Run Code Online (Sandbox Code Playgroud)