【发布时间】:2016-09-27 20:09:42
【问题描述】:
我正在处理一个学校项目,但我遇到了一个问题。
我想按照口袋妖怪的速度对我的列表进行排序。我可以在我的主程序(控制台)中对其进行排序
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();
我的数组没有排序。
我不知道你是否明白,但我想使用 void 方法和 linq 查询。
提前感谢您的回复。
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 ;
}
}
【问题讨论】:
-
您正在为
var sorted = ...列出的排序声明一个变量,但您的返回类型是void。您实际上需要return排序列表,而不仅仅是将其分配给变量。 -
PokeList = (from p in PokeList orderby p.vitesse() ascending select p).ToList(); -
您能否发布
PokemonSportif类的构造函数,因为很难看到您传入的内容,实际上是这样吗?乍一看,您的orderBySpeedAscending()方法只是创建了一个sortedIEnumerable而没有做任何其他事情。您能否更具体地说明您的代码的哪一部分不起作用?您有 2 个 OrderBy 查询 - 哪一个有问题? -
完成代码正在运行,只是我想在我的类中创建方法(使用 linq 查询)来管理我的列表
标签: c# linq list sorting methods