C# 如何使用foreach C对列表中的项目进行排序#

C# 如何使用foreach C对列表中的项目进行排序#,c#,list,sorting,foreach,C#,List,Sorting,Foreach,我需要使用foreach按年龄对列表中的项目进行升序排序,因此我不知道如何进行排序。这是我目前的代码: namespace ListProject { public struct FamilyMem { public string name; public int age; public FamilyMem(string name,int age) { this.name = name;

我需要使用foreach按年龄对列表中的项目进行升序排序,因此我不知道如何进行排序。这是我目前的代码:

namespace ListProject
{
    public struct FamilyMem
    {
        public string name;
        public int age;

        public FamilyMem(string name,int age)
        {
            this.name = name;
            this.age = age;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            FamilyMem Jack = new FamilyMem("Jack", 15);
            FamilyMem Tom = new FamilyMem("Tommy", 24);
            FamilyMem Felix = new FamilyMem("Felix", 26);
            FamilyMem Lukas = new FamilyMem("Lukas", 26);
            FamilyMem Austin = new FamilyMem("Austin", 54);
            FamilyMem Ben = new FamilyMem("Ben", 55);

            List<FamilyMem> gambleList = new List<FamilyMem>();

            gambleList.Add(Jack);
            gambleList.Add(Tom);
            gambleList.Add(Felix);
            gambleList.Add(Lukas);
            gambleList.Add(Austin);
            gambleList.Add(Ben);

            Console.WriteLine(gambleList.Count.ToString());


        }
    }
} 
名称空间列表项目
{
公共结构家庭
{
公共字符串名称;
公共信息;
public FamilyMem(字符串名称,int-age)
{
this.name=名称;
这个。年龄=年龄;
}
}
班级计划
{
静态void Main(字符串[]参数)
{
FamilyMem Jack=新的FamilyMem(“Jack”,15);
FamilyMem Tom=新的FamilyMem(“汤米”,24岁);
FamilyMem Felix=新的FamilyMem(“Felix”,26);
FamilyMem Lukas=新的FamilyMem(“Lukas”,26);
FamilyMem Austin=新的FamilyMem(“Austin”,54岁);
FamilyMem Ben=新的FamilyMem(“Ben”,55岁);
列表=新列表();
列表。添加(杰克);
赌徒名单。加上(汤姆);
添加(Felix);
添加(卢卡斯);
赌徒名单。增补(奥斯汀);
列表。添加(Ben);
Console.WriteLine(gambleList.Count.ToString());
}
}
} 

我还需要一个单独的代码,将允许我排序的名称字母顺序。谢谢

我建议你去找林克。只要用谷歌搜索一下就可以了。 您可以使用OrderBy执行此操作,如下所示:

gambleList = gambleList.OrderBy(x => x.age).ToList();

我建议您看看一些IEnumerable方法()和一些示例:

例如:

Pet[] pets = { new Pet { Name="Barley", Age=8 },
               new Pet { Name="Boots", Age=4 },
               new Pet { Name="Whiskers", Age=1 } };

IEnumerable<Pet> query = pets.OrderBy(pet => pet.Age);

foreach (Pet pet in query)
{
    Console.WriteLine("{0} - {1}", pet.Name, pet.Age);
}
Pet[]pets={新宠物{Name=“大麦”,年龄=8},
新宠物{Name=“Boots”,年龄=4},
新宠物{Name=“胡须”,年龄=1};
IEnumerable query=pets.OrderBy(pet=>pet.Age);
foreach(查询中的宠物)
{
Console.WriteLine(“{0}-{1}”,pet.Name,pet.Age);
}

在使用foreach循环对集合进行迭代时,不能编辑集合,因此至少这是不可能的。但是,您可以使用LINQ或一些for循环。使用类似于:

gambleList = gambleList.OrderBy(item => item.name).ToList();
顺便说一下,赋值的原因是OrderBy操作(不同于,例如,
Sort()
方法)没有对集合进行适当的排序—它返回对已排序集合的引用


您还可以使用标准for循环或递归函数来实现插入排序之类的功能。

好吧,我们不打算为您编写代码。这不是一个代码编写服务。你为什么不在谷歌上搜索“排序算法”并选择你最喜欢的一个。看看Linq
OrderBy
在我考虑它的时候,你可以做一件事来缩短这段代码:你可以使用集合初始值设定项语法:如果你不能评论,那么不要试图在答案中插入评论。答案应该保留为实际答案,而不是绕过系统。好的。很抱歉,我们不需要再次使用.ToList()。因为它已经是一个列表了。简单地
gambleList.OrderBy(x=>x.age)很好。@Ripon这不正确。OrderBy的实际返回类型为System.Linq.IORDerenumerable(非列表),并且没有从该类型到列表的隐式转换;因此,如果在我提供的代码中省略ToList,它甚至不会编译。此外,LINQ大量使用延迟/延迟求值,因此在您以某种方式迭代列表之前,查询甚至不会发生。请看@EJoshuaS,我的全部观点是,赌博清单已经是一个清单了。那么,为什么我们需要再次分配该列表。我们可以简单地进行排序,而不需要重新分配。我从来没有说过你的答案是不正确的。@Ripon OrderBy不按顺序排列项目(例如,与排序方法不同)。如果您尝试简单地执行“gambleList.OrderBy(x=>x.age);”如果没有任务,你会看到赌徒名单保持不变。是的,你是对的。感谢您的澄清。您必须执行“gambleList=gambleList.OrderBy(item=>item.name).ToList();”,因为OrderBy没有对列表进行适当排序;此代码将保持列表不变。此外,OP希望按字母顺序对它们进行排序,因此他可能希望按名称而不是年龄进行排序。根据我对它们的排序方式,它可以在item.name和item.age之间互换