我正在尝试移除gcNumber
中的某个项目,但它没有被删除。以下是我的代码。我知道我在做一些愚蠢的事情,但不知道在哪里:(
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();
如果我CountToRemove.count()>0
,那么我想删除gcNumber
列表中的该项目。请帮助我做错了。
答案 0 :(得分:1)
gcNumber.ToList().Remove(selectGc);
此行创建一个新列表,您可以从中删除内容,然后由于您不执行任何其他操作(例如将列表分配到任何位置),将修改后的列表抛弃。
我猜你想要做的事情是这样的:
gcn.Remove(selectGc);
您还想修改foreach
,以便不会对正在修改的内容进行循环。
foreach(var selectGg in gcNumber)
这将循环原始内容,允许您修改副本。
并且您可能希望返回gcn
,因为您的return语句只会根据gcNumber
创建另一个尚未修改的新列表。
总结:.ToList()
每次都会创建一个新列表,因此修改该列表不会对原始列表做任何事情。
答案 1 :(得分:1)
而不是gcNumber.ToList().Remove(selectGc);
只做gcNumber.Remove(selectGc);
答案 2 :(得分: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它不是从列表中删除项目的最佳方式,但很明显。您无法删除枚举的项目表单列表。