C# 对元组列表排序

C# 对元组列表排序,c#,list,tuples,C#,List,Tuples,我有一个元组列表,如下所示: List<Tuple<Material, Material>> materials 我想对Materials列表进行排序,以便首先完成Item2填充的元组(至少不为null) 我猜是这样的 foreach(var material in materials.OrderBy(*something*)) { // Do stuff } 然而,我还没有真正找到一种方法来做到这一点 如果您只想要带有item2的=空首先,您可以执行以下操作

我有一个元组列表,如下所示:

List<Tuple<Material, Material>> materials
我想对Materials列表进行排序,以便首先完成Item2填充的元组(至少不为null)

我猜是这样的

foreach(var material in materials.OrderBy(*something*))
{
    // Do stuff
}

然而,我还没有真正找到一种方法来做到这一点

如果您只想要带有
item2的=空
首先,您可以执行以下操作:

var materialslist = materials.Where(x => x.Item2 != null)
                             .Concat(materials.Where(x => x.Item2 == null)).ToList();
foreach(var material in materialslist)
{
     //Do Stuff
}

如果您只想要带有
item2的=空
首先,您可以执行以下操作:

var materialslist = materials.Where(x => x.Item2 != null)
                             .Concat(materials.Where(x => x.Item2 == null)).ToList();
foreach(var material in materialslist)
{
     //Do Stuff
}

您可以按顺序排序,如果不为空,则给出值“0”,如果为空,则给出值“1”


这样,空值将在最后消失。首先是所有的“0”(不为空),然后是所有的“1”(为空)

您可以按顺序排序,如果不为空,则给出值“0”,如果为空,则给出值“1”


这样,空值将在最后消失。首先是所有“0”(非空),然后是所有“1”(空)

谢谢,让我试试看。我刚刚尝试了materialen.OrderBy(f=>f.Item2!=null)。然后是by(f=>f.Item2==null),但是如果Item2为null,它似乎不会返回任何项目。虽然我的答案有效,但我认为@OfirWinegarten更优雅。是的,我也非常喜欢你的答案。我投你一票!谢谢,让我试一试。我刚刚尝试了materialen.OrderBy(f=>f.Item2!=null)。然后是by(f=>f.Item2==null),但是如果Item2为null,它似乎不会返回任何项目。虽然我的答案有效,但我认为@OfirWinegarten更优雅。是的,我也非常喜欢你的答案。我投你一票!“我想对材质列表进行排序,以便首先完成填充了Item2(至少不为null)的元组。”“我想对材质列表进行排序,以便首先完成填充了Item2(至少不为null)的元组。”这是一个很好的解决方案+1这是一个很好的解决方案+1.
foreach(var material in materials.OrderBy(t=>t.Item2 == null ? 1 : 0))
foreach(var material in materials.OrderByDescending(s => s.Item2 != null));