2014-12-09 3 views
1

Я пытаюсь записать все мои объекты с именем/адресом/возрастом/точкой вида и т. Д. Создал метод, называемый визой, который возвращает то, что я хочу записать. Попытка использовать этот метод со списком, который содержит объекты, и вывести все результаты в ящик сообщений. Что я должен использовать в качестве метода получения визы для написания всего сообщения?Сортировка списка объектов не работает

// Редактировать: Метод записи исправлен, но теперь сортировка не работает. Пробовал 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(); 
    } 
} 

ответ

1

Я не вижу метод, называемый visa, но если были и вернули строку для отдельного Artist Например, вы можете создать одну строку сформировать список следующим образом:

string result = string.Join("\n",artister.Select(a => a.visa())); 
MessageBox.Show(result); 
+0

Он работает прекрасно сейчас, но моя цифровая сортировка больше не работает. Тот, кто имеет самую высокую точку, движется вверх по списку, интересно, это зависит от этого? – elly

+0

Я бы поменял ваш 'Compare' на просто' return a.bidragPoang.Compare (b.bidragPoang); 'или использовать Linq. –

+0

Тем не менее, ваш метод «Compare» выглядит с первого взгляда, поэтому я не знаю, в чем проблема. –

1
foreach (var artist in artister) 
    MessageBox.Show(artist.visa()); 

или

MessageBox.Show(string.Join(Environment.NewLine, artister.Select(x => x.visa())));