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()
或其他属性…感谢您尝试停留在我问题的范围内,但它的措辞是无知的,但我很高兴看到可以用另一种方式完成。