类中的C#Linq查询没有';不起作用

本文关键字:不起作用 C#Linq 查询 | 更新日期: 2023-09-27 18:09:10

我正在进行学校项目,我遇到了一个问题。

我想按pokemon的速度对我的列表进行排序。我在我的主程序(控制台(中对它进行排序没有问题

class Program
{
    public static void Main()
    {
        TabPokemon tab = new TabPokemon();
        PokemonSportif poke = new PokemonSportif("Pikachu", 110, 22, 1, 56);
        tab.Add(poke);
        PokemonSportif poke1 = new PokemonSportif("Salameche", 15, 2, 3, 56);
        tab.Add(poke1);
        PokemonSportif poke2 = new PokemonSportif("Bulbizar", 5, 8, 2, 56);
        tab.Add(poke2);
        PokemonSportif poke3 = new PokemonSportif("Mew", 10, 30, 1, 56);
        tab.Add(poke3);
        var sorted = from p in tab orderby p.vitesse() ascending select p;
        foreach(Pokemon p in sorted)
        {
            write(p.ToString() + " -- Vitesse: " + p.vitesse());
            sauterLigne();
        } 
        Console.Read();
    }
    static public void write(string chaine)
    {
        Console.WriteLine(chaine);
    }
    static public void sauterLigne()
    {
        Console.WriteLine(Environment.NewLine);
    }
}

但我想在管理我的列表的类中使用我的Linq查询。

当我调用我的函数时,它不工作

我的班级:

class TabPokemon : List<Pokemon>
{
    List<Pokemon> PokeList;
    public TabPokemon()
    {
        PokeList = new List<Pokemon>();
    }
    public void orderBySpeedAscending()
    {
        var sorted = from p in PokeList orderby p.vitesse() ascending select p;
    }
}

当我想在我的程序中用以下指令调用它时:

tab.orderBySpeedAscending();

我的数组没有排序。

我不知道你是否理解,但我想在linq查询中使用void方法。

提前感谢您的回复。

class PokemonSportif : Pokemon
{
    int nbPattes;
    double taille, frqCardiaque;
    public int NbPattes
    {
        get
        {
            return nbPattes;
        }
        set
        {
            nbPattes = value;
        }
    }  
    public double Taille
    {
        get
        {
            return taille;
        }
        set
        {
            taille = value;
        }
    }
    public double FrqCardiaque
    {
        get
        {
            return frqCardiaque;
        }
        set
        {
            frqCardiaque = value;
        }
    }
    public PokemonSportif(string unNom, double unPoid, int unNbPattes, double uneTaille, double uneFrqCardiaque) : base(unNom, unPoid)
    {
        NbPattes = unNbPattes;
        Taille = uneTaille;
        FrqCardiaque = uneFrqCardiaque;
    }
    public override double vitesse()
    {
        return NbPattes * Taille * 3;
    }
    public override string ToString()
    {
        return base.ToString() + " || Nombre de pattes: " + NbPattes + " || Taille: "+Taille + " || Frequence cardiaque: "+FrqCardiaque ;
    }
}

类中的C#Linq查询没有';不起作用

大多数linq查询不会修改原始列表,而是在运行查询时返回一个新集合。

public void orderBySpeedAscending()
{
    this.PokeList = (from p in PokeList orderby p.vitesse() ascending select p).ToList();
}

执行以上操作将具有替换PokeList变量中引用的列表的效果。

在函数orderBySpeedAcending中,您将排序结果分配给一个名为sorted的局部变量,然后在退出函数时将其丢弃。

您需要将排序后的结果保存到类成员中,以便在函数退出后保留其值。

    public void orderBySpeedAscending()
{
    var sorted = from p in PokeList orderby p.vitesse() ascending select p;
    this.PokeList = sorted.ToList();
}

这应该将列表设置为已排序的var。