2017-01-12 6 views
0

zu entfernen, versuche ich ein Element in meinem gcNumber zu entfernen, aber es wird nicht entfernt. Unten ist mein Code. Ich weiß, ich einige dumme Sache tue, aber nicht wissen, wo :(Um ein Element in der Liste

var gcn=gcNumber.ToList(); 
foreach (var selectGc in gcn) 
    {     
     var countToRemove = _uow.GetRepository<TripSheetGcDetail>().GetAll().Where(x => x.FkGcId == selectGc.Id && x.IsActive == true).Select(y => y); 
     if(countToRemove .Count()>0) 
     {     
      gcNumber.ToList().Remove(selectGc); 
     } 
     else 
     { 
     } 

    } 
    return gcNumber.ToList(); 

wenn mein CountToRemove.count()>0 dann möchte ich in meiner gcNumber Liste das Element entfernen. Bitte helfen, wo ich falsch mache.

Antwort

1
gcNumber.ToList().Remove(selectGc); 

Diese Zeile erstellt eine neue Liste, die Sie Sachen aus, dann entfernen, da Sie etwas nicht tun, andere (wie die Liste zuweisen, wo jeder) wirft die modifizierte Liste entfernt.

ich vermute, was Sie wollen zu tun ist etwas wie:

gcn.Remove(selectGc); 

Sie wollen auch Ihre foreach so modifizieren, dass sie nicht über etwas Looping wird, die geändert wird immer.

foreach(var selectGg in gcNumber) 

Dies wird Schleife über die ursprüngliche Sache, so dass Sie die Kopie ändern können.

Und wahrscheinlich möchten Sie gcn zurückgeben, da Ihre Return-Anweisung nur eine andere neue Liste basierend auf gcNumber erstellt, die nicht geändert wurde.

Zusammenfassend: .ToList() erstellt jedes Mal eine neue Liste, so dass die Änderung dieser Liste nichts mit dem Original zu tun hat.

+0

ich habe 'gcn.Remove (selectGc);' angewendet, aber wenn es foreach geht, wird ein Fehler geworfen 'gcn' ist modifiziert – Steve

+0

Sie können das Ding, über das Sie iterieren, nicht ändern. Ihre Foreach sollte wahrscheinlich so aussehen: 'foreach (var selectGc in gcn.ToList())' Damit Sie eine Kopie über eine Kopie schleifen, nicht die Version, die geändert wird. –

+0

Oder 'foreach (var selectGg in gcNumber)' das ist das Original, bevor Sie es in eine neue Liste kopiert haben. –

1

statt gcNumber.ToList().Remove(selectGc); tun nur gcNumber.Remove(selectGc);

0
using System; 
using System.Collections.Generic; 
using System.Linq; 

public class Program 
{ 
    public class MyClass 
    { 
     public string Name {get; set;} 
    } 

    public static void Main() 
    { 

     var list = new List<MyClass>(); 

     list.Add(new MyClass() {Name = "aaa"}); 
     list.Add(new MyClass() {Name = "bbb"}); 
     list.Add(new MyClass() {Name = "ccc"}); 
     list.Add(new MyClass() {Name = "ddd"}); 

     var indexesToRemove = new List<int>(); 

     foreach(var item in list) 
     { 
       if(item.Name == "aaa") 
        indexesToRemove.Add(list.IndexOf(item)); 
     } 

     foreach (var num in indexesToRemove) 
      list.RemoveAt(num); 


      Console.WriteLine(list.First().Name); 

    } 
} 

Maby es nicht der beste Weg ist es, Elemente aus der Liste zu entfernen, aber es ist klar. Sie können Elemente aus der Liste, die aufzählt, nicht entfernen.

Verwandte Themen