Я пытаюсь записать все мои объекты с именем/адресом/возрастом/точкой вида и т. Д. Создал метод, называемый визой, который возвращает то, что я хочу записать. Попытка использовать этот метод со списком, который содержит объекты, и вывести все результаты в ящик сообщений. Что я должен использовать в качестве метода получения визы для написания всего сообщения?Сортировка списка объектов не работает
// Редактировать: Метод записи исправлен, но теперь сортировка не работает. Пробовал 2-3 разных комбинаций, но не работал.
public class Artist : MusikBidrag
{
public string namn { get; set; }
public int fodelseAr { get; set; }
public string fodelseOrt { get; set; }
public string visa()
{
return "Namn: " + namn + " Födelse år: " + fodelseAr + " Födelse ort: " + fodelseOrt + "\nBidrag: " + bidragTitel + " Bidrag längd: " + bidragLangd + " Poäng: " + bidragPoang + "\n\n";
}
}
public class MusikBidrag
{
public string bidragTitel { get; set; }
public double bidragLangd { get; set; }
public int bidragPoang { get; set; }
}
public class sortOnPoints : IComparer<MusikBidrag>
{
public int Compare(MusikBidrag a, MusikBidrag b)
{
if (a.bidragPoang > b.bidragPoang) return 1;
else if (a.bidragPoang < b.bidragPoang) return -1;
else return 0;
}
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Melodi Festivalen\n\n");
int count = int.Parse(Interaction.InputBox("Hur många Artister och Bidrag vill du ha?"));
while (count != 2 && count < 2)
{
MessageBox.Show("Du kan inte ha mindre än 2 Artister/Bidrag");
count = int.Parse(Interaction.InputBox("Hur många Artister och Bidrag vill du ha?"));
}
List<Artist> artister = new List<Artist>();
for (int i = 0; i < count; i++)
{
Artist temp = new Artist();
temp.namn = Interaction.InputBox("Skriv in Artist nr " + (i + 1));
temp.fodelseAr = int.Parse(Interaction.InputBox("Skriv in födelse år för Artist nr " + (i + 1)));
temp.fodelseOrt = Interaction.InputBox("Skriv in adress för Artist nr " + (i + 1));
temp.bidragTitel = Interaction.InputBox("Skriv in bidrag titel för Artist nr " + (i + 1));
temp.bidragLangd = double.Parse(Interaction.InputBox("Hur långt är bidraget? (t.ex. 2,44)"));
artister.Add(temp);
}
MessageBox.Show("Tack! Nu är det dags att Rösta!");
for (int i = 0; i < count; i++)
{
artister[i].bidragPoang += int.Parse(Interaction.InputBox("Röstning tur 1\n\nHur många poäng vill du ge för Bidrag nr " + (i + 1) + " ?\n\n" + artister[i].namn + " - " + artister[i].bidragTitel));
}
for (int i = 0; i < count; i++)
{
artister[i].bidragPoang += int.Parse(Interaction.InputBox("Röstning tur 2\n\nHur många poäng vill du ge för Bidrag nr " + (i + 1) + " ?\n\n" + artister[i].namn + " - " + artister[i].bidragTitel));
}
for (int i = 0; i < count; i++)
{
artister[i].bidragPoang += int.Parse(Interaction.InputBox("Röstning tur 3\n\nHur många poäng vill du ge för Bidrag nr " + (i + 1) + " ?\n\n" + artister[i].namn + " - " + artister[i].bidragTitel));
}
//sortOnPoints soa = new sortOnPoints();
//artister.Sort(soa);
artister.Sort((a, b) => a.bidragPoang.CompareTo(b.bidragPoang));
string result="";
foreach (var artist in artister)
{
result = string.Join("\n", artister.Select(a => a.visa()));
}
MessageBox.Show(result);
Console.ReadKey();
}
}
Он работает прекрасно сейчас, но моя цифровая сортировка больше не работает. Тот, кто имеет самую высокую точку, движется вверх по списку, интересно, это зависит от этого? – elly
Я бы поменял ваш 'Compare' на просто' return a.bidragPoang.Compare (b.bidragPoang); 'или использовать Linq. –
Тем не менее, ваш метод «Compare» выглядит с первого взгляда, поэтому я не знаю, в чем проблема. –