2016-06-22 9 views
0

Ich möchte arithmetische Operationen mit meiner Liste realisieren, in diesem Fall: Spalte "Breite" * Spalte "Höhe" sollte die Spalte "Teilweise" neu schreiben. Ich habe versucht, eine Schleife zu tun, aber es funktioniert nicht. Ich habe einen Haltepunkt an der Reihe:C# Liste mit arithmetischen Operationen

_Area[i].Partial = _Area[i].width * _Area[i].height;

Und die Debug stoppen sie nie kann ich diese Linie denken, ist nicht von mir gelesen worden.

Das ist meine Sammlung Ansicht Modell ist:

public class CollectionVM_Area : BindableBase 
{ 
    private Values_Area _Area = new Values_Area(); 
    public Values_Area Area 
    { 
     get { return _Area; } 
     set { SetProperty(ref _Area, value); } 
    } 

    public CollectionVM_Area() 
    { 
     _Area.Add(new Area() 
     { 
      width=10, 
      height=11, 
     }); 
     _Area.Add(new Area() 
     { 
      width=5, 
      height=5, 
      Partial=1, 
     }); 

     bool NeedPartial = false; 
     int i = 0; 
     while (NeedPartial = false && i < _Area.Count) 
     { 
      if (_Area[i].Partida == true) 
      { 
       NeedPartial = true; 
      } 
      else 
      { 
       i++; 
      } 
     } 

     if (NeedPartial==true) 
     { 
      _Area[i].Partial = _Area[i].width * _Area[i].height; 
      NeedPartial = false; 
     } 
     else 
     { 
      NeedPartial = true; 
     } 
    } 
} 

Mein Projekt ist ein UWP aber ich denke, mit einer Windows-Formen in Listen sind nicht anders, ist jede Hilfe dankbar.

+0

Wird die Zeile 'NeedPartial = false' ausgeführt? In diesem Fall sollten Sie Ihr Projekt neu erstellen und erneut debuggen. Sonst wird Ihre 'NeedPartial == true' (die zu' if (NeedPartial) 'vereinfacht werden kann, nie übergeben. – HimBromBeere

+0

Danke für die schnelle Antwort, die Zeile NeedPartial = false; unter _Area [i] .Partial = _Area [i] .width * _Area [i] .height; wird nicht ausgeführt. – Julius

+0

Dann ist die Bedingung nicht erfüllt, check 'NeedPartial's Wert. Ist es' true'? Ich bezweifle das. Btw .: Dein letzter 'else'-Zweig ist veraltet, weil 'NeedPartial' nicht mehr verwendet wird (das gleiche gilt für die zweite Anweisung im letzten 'if'-Zweig) – HimBromBeere

Antwort

0

Sie haben zwei Mistalkes in Ihrem Code. Zuerst macht Ihre while-Schleife eine Zuordnung anstelle eines Vergleichs (= in Richtung ==). Somit wird der erste Begriff innerhalb Ihrer while-Bedingung immer false. Zweitens befindet sich Ihre Berechnung außerhalb der Schleife, wodurch der NeedPartial -Wert gesetzt wird, aber nie gelesen wird, was ich bezweifle, was Sie wollen.

schreiben diese hierfür:

bool NeedPartial = false; 
int i = 0; 
while (NeedPartial == false && i < _Area.Count) // or even simpler: while (!NeedPartial ...) 
{ 
    if (_Area[i].Partida == true) // or simply: if (_Area[i].Partida) { ... } 
    { 
     NeedPartial = true; 
    } 
    else 
    { 
     i++; 
    } 

    if (NeedPartial==true) // if (NeedPartial) ... 
    { 
     _Area[i].Partial = _Area[i].width * _Area[i].height; 
     NeedPartial = false; 
    } 
    else 
    { 
     NeedPartial = true; 
    } 
} 
0

Edit: Beantwortet.

Die richtige Loop ist:

bool NeedPartial = false; 
      int i = 0; 
      while (!NeedPartial && i < _Area.Count) 
      { 
       if (_Area[i].Partida) 
       { 
        NeedPartial = true; 
       } 
       else 
       { 
        i++; 
       } 
       if (NeedPartial) 
       { 
        _Area[i].Partial = _Area[i].width * _Area[i].height; 
        NeedPartial = false; 
        i++; 
       } 
       else 
       { 
        NeedPartial = true; 
       } 
      } 

Dank HimBromBeere für Ihre Hilfe.

Verwandte Themen