C# 列表<;Uri>;。OrderBy()基于Contains()排序顺序?

C# 列表<;Uri>;。OrderBy()基于Contains()排序顺序?,c#,list,collections,C#,List,Collections,我定义了一个标准的列表,其中包含一个简短的项目列表。我希望使用foreach()遍历列表,但希望将包含特定字符串值的项“置于顶部”,以便首先处理它们。这在OrderBy()中是可能的吗?更好的是,在一行中也是可能的吗? 谢谢 是的。您可以使用返回布尔值的顺序使用OrderByDescending()。例如: var results = items.OrderByDescending( x => x.Name=="Herbert").ToList(); 在这种情况下,对于“Herbert”

我定义了一个标准的
列表
,其中包含一个简短的项目列表。我希望使用foreach()遍历列表,但希望将包含特定字符串值的项“置于顶部”,以便首先处理它们。这在OrderBy()中是可能的吗?更好的是,在一行中也是可能的吗?
谢谢

是的。您可以使用返回布尔值的顺序使用
OrderByDescending()
。例如:

var results = items.OrderByDescending( x => x.Name=="Herbert").ToList();
在这种情况下,对于“Herbert”,顺序将返回
true
,对于所有其他值,顺序将返回
false
。所有
true
值将在所有
false
值之后排序-我们使用
OrderByDescending()
反转顺序,并获得所需的结果

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

foreach(var uri in uriList.OrderByDescending(x => x.ToString().Contains(someString))
{
   //..
}
你可以这样做:

foreach(var uri in uriList.OrderByDescending(uri => uri.ToString().Contains("foo"))
{
    // Use uri

其他人使用OrderByDescending,这将起作用,但您要求使用OrderBy,因此:

yourList.OrderBy(u => u.AbsoluteUri.Contains("somevalue") ? string.Empty : u.AbsoluteUri);

仅供参考-AbsoluteUri将抛出特定类型的Uri实例。不确定此列表中存储了什么,但如果您存储的是相对Uri信息,请使用
ToString()
或其他属性…感谢您尝试停留在我问题的范围内,但它的措辞是无知的,但我很高兴看到可以用另一种方式完成。