2016-07-06 4 views
0

Situation: Ich habe 3 Klassen, die miteinander arbeiten. 1: Main (GUI) 2: Vergleichen (die Werte vergleichen) 3: CompareData (die Liste Werte erbt)Der beste Weg, um das niedrigste Element in einer Liste zu bekommen

ich zwei Werte annehmen wollen: einen String und eine doppelte, und sie in ein setzen Liste. Natürlich wird es am Ende mehr als nur einen Listenpunkt geben. Nachdem die Liste gefüllt ist, möchte ich das niedrigste Double mit der Saite bekommen und sie in ein Label setzen. Hier

ist das, was ich bisher habe:

Main:

public class GlobaleDaten //The second List: VglDaten is the one for my situation 
{ 
    public static List<Daten> AlleDaten = new List<Daten>(); 
    public static List<Vgl> VglDaten = new List<Vgl>(); 
} 

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
    } 

    [...Some Code thats not relevant...] 


//addListAb adds values in a ListBox and should also 
//place them into the list VglDaten 

    public void addListAb() 
    { 
     listBox.Items.Add(Abzahlungsdarlehenrechner.zgName + " " + "[Abzahlungsdarlehen]" + " " +Abzahlungsdarlehenrechner.zmErg.ToString("0.00") + "€" + " " + Abzahlungsdarlehenrechner.zgErg.ToString("0.00") + "€"); 

     Vgl comp = new Vgl(); 
     comp.name = Abzahlungsdarlehenrechner.zgName; 
     comp.gErg = Abzahlungsdarlehenrechner.zgErg; 

     GlobaleDaten.VglDaten.Add(comp); 
    } 

//bVergleich should compare these values from the list 
//and show the lowest value in a label 
    public void bVergleich_Click(object sender, RoutedEventArgs e) 
    { 
     if (listBox.Items.Count <= 0) 
     { 
      MessageBox.Show("Bitte erst Einträge hinzufügen."); 
     } 
     else 
     { 
      VglRechner vglr = new VglRechner(); 
      vglr.Compare(); 

      lVergleich.Content = VglRechner.aErg + " " + "€"; 
     } 
    } 

CompareData:

//Only used for storing the values 
public class Vgl : Window 
{ 
    public string name { get; set; } 
    public double gErg { get; set; } 
} 

vergleichen:

public class VglRechner 
{ 

    public static string aName; 
    public static double aErg; 

    public void Compare(Vgl comp) 
    { 

    //I'm not sure if this is the right way to compare the values 
    //correct me if I'm wrong please :) 
     double low = GlobaleDaten.VglDaten.Min(c => comp.gErg); 

     aErg = low; 
     aName = comp.name; 
    } 
} 

Antwort

1

Mit Enumerable.Min ist die richtige Weg um den niedrigsten Wert zu erhalten, aber Sie erhalten nicht die string, die auf diese Weise zu diesem Wert gehörte, also die Vgl Instanz.

Sie diesen Ansatz verwenden:

Vgl lowestItem = GlobaleDaten.VglDaten.OrderBy(c => c.gErg).First(); 
aErg = lowestItem.gErg; 
aName = lowestItem.name; 
+0

Der Vergleich funktioniert perfekt, danke :) Aber ich habe eine andere Frage habe: Wenn ich das Etikett auf den Wert von aErg festlegen möge, und es ist immer noch AName 0. Obwohl VglRechner.aErg richtig ist, nicht wahr? –

+0

Zu meinem Kommentar: Hatte nichts mit Ihrem oder meinem Code zu tun. Es gab eine falsche Eigenschaft für das Label, sorry für Verwirrung du :) –

Verwandte Themen