2017-02-02 6 views
0

Ich habe eine Funktion, die einen Benutzer aus einer Gruppe löscht.Falsche Nachricht wegen For-Schleife

Zuerst wird geprüft, ob überhaupt Benutzer in der Gruppe sind. Dann durchläuft es in einer For-Schleife alle Benutzer und prüft, ob der aktuelle Benutzer, der eingegeben wurde, in der Gruppe existiert.

Zum ersten Mal funktioniert es. Es löscht den Benutzer. Aber in der zweiten Zeit existiert der Benutzer nicht mehr und es kommt zur else-Anweisung.

Wie kann ich die for-Schleife beenden, wenn der Benutzer gelöscht wird? Hier

ist der Code:

for (int y = 0; y < cognosGroup.members.value.Length; y++) 
{ 
    //check if member[y] is the one that need to be deleted 
    if (cognosGroup.members.value[y].searchPath.value == member[0].searchPath.value) 
    { 
     int lenght = cognosGroup.members.value.Length - 1; 

     baseClass[] newMembers = new baseClass[lenght]; 
     int index = 0; 
     baseClass obj = null; 
     // go trough group 
     for (int i = 0; i <= lenght; i++) 
     { 
      if (i != y) 
      { 
       //create user 
       obj = cognosGroup.members.value[i]; 
       newMembers[index] = obj; 
       index++; 
      } 
      else 
      { 
       this._messageText = "*Succesfully removed " + this.RemoveUsername.ToLower() + " from " + this.DataViewModel.GroupModel.SelectedGroup; 
       this.ExHandling = new ExceptionHandling(this._messageText); 
       this.MessageText = this.ExHandling.ExHandlingOkey; 
      } 
     } 
     cognosGroup.members = new baseClassArrayProp(); 
     cognosGroup.members.value = newMembers; 
     this.LogonModel.CBICMS.update(new baseClass[] { cognosGroup }, new updateOptions()); 
     y--; 
    } 
    else 
    { 
     this._messageText = "*" + this.RemoveUsername.ToLower() + " is not a user from " + this.DataViewModel.GroupModel.SelectedGroup; 
     this.ExHandling = new ExceptionHandling(this._messageText); 
     this.MessageText = this.ExHandling.ExHandlingError; 
    } 
} 
+4

'break' Aussage? Übrigens kann dieser Code in eine einzelne Zeile umgeschrieben werden. Siehe: [Wie lösche ich ein Element aus einem Array in C#] (http://stackoverflow.com/q/496896/69809). – Groo

+1

könnten Sie Pause verwenden? –

+2

Im Ernst, tun Sie dies nicht, wenn Sie dies tun können: 'members.value = members.value.Where (v => v.searchPath.value! = Item) .ToArray();'. [* Code, als ob die Person, die endet, Ihren Code aufrechtzuerhalten, ein gewalttätiger Psychopath ist, der weiß, wo Sie leben *] (http://wiki.c2.com/?CodeForTheMaintainer). – Groo

Antwort

3

einfach die Return-Anweisung verwenden, um die Routine zu beenden oder weiter in der nächsten Iteration überspringen.

+0

oh so einfach. Vielen Dank! – Purger86

+3

Return beendet die Funktion, break beendet die Schleife, in der Sie sich befinden. – Thor

Verwandte Themen