排序对象列表不起作用

时间:2014-12-09 20:34:59

标签: c# .net linq

我尝试用物种名称/地址/年龄/点等写出我的所有物品。创建了一个名为visa的方法,它返回我想写的内容。尝试将该方法与包含对象的列表一起使用,并在消息框中写出所有结果。我应该如何使用签证方法在邮箱中写下所有内容?

//编辑:写出方法是固定的,但现在排序不起作用。尝试了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();
    }
}

2 个答案:

答案 0 :(得分:1)

我没有看到名为visa的方法,但是如果并且它返回了单个Artist实例的字符串,则可以创建一个字符串形式列表如此:

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

答案 1 :(得分:1)

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

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