类中的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 ;
}
}
大多数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。