根据条件从列表中删除项目
本文关键字:删除项目 列表 条件 | 更新日期: 2023-09-27 18:36:43
下面是我的类的代码。该代码创建一个数组列表。 然后,它将许多"PipesList"添加到 ArrayList,在每个列表中添加 Pipes。
我想写一个方法 -RemoveTheSmallPipes 来摆脱所有长度小于 19 的管道。为此,我写了一段我不知道有效与否的代码!当代码抛出错误时:
编译器错误消息:CS0050:可访问性不一致:返回类型"System.Collections.Generic.List"比方法"Program.RemoveTheSmallPipes(System.Collections.Generic.List)"更难访问
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
/// <summary>
/// Summary description for Class1
/// </summary>
public class Program
{
static void Main(string[] args)
{
List<PipesList> lstPipeTypes = new List<PipesList>();
lstPipeTypes.Add(new PipesList("PVC Pipes"));
lstPipeTypes[0].Pipes.Add(new Pipe("The blue pipe", 12));
lstPipeTypes[0].Pipes.Add(new Pipe("The red pipe", 15));
lstPipeTypes[0].Pipes.Add(new Pipe("The silver pipe", 6));
lstPipeTypes[0].Pipes.Add(new Pipe("The green pipe", 52));
lstPipeTypes.Add(new PipesList("Iron Pipes"));
lstPipeTypes[1].Pipes.Add(new Pipe("The gold pipe", 9));
lstPipeTypes[1].Pipes.Add(new Pipe("The orange pipe", 115));
lstPipeTypes[1].Pipes.Add(new Pipe("The pink pipe", 1));
lstPipeTypes.Add(new PipesList("Chrome Pipes"));
lstPipeTypes[2].Pipes.Add(new Pipe("The grey pipe", 12));
lstPipeTypes[2].Pipes.Add(new Pipe("The black pipe", 15));
lstPipeTypes[2].Pipes.Add(new Pipe("The white pipe", 19));
lstPipeTypes[2].Pipes.Add(new Pipe("The brown pipe", 60));
lstPipeTypes[2].Pipes.Add(new Pipe("The peach pipe", 16));
lstPipeTypes = RemoveTheSmallPipes(lstPipeTypes);
foreach (var pipeList in lstPipeTypes)
{
Console.WriteLine("PipesList: {0}", pipeList.pipeType);
foreach (var pipe in pipeList.Pipes)
{
Console.WriteLine("{0}, length: {1}", pipe.name, pipe.length);
}
Console.WriteLine();
}
Console.WriteLine("Done, press return to exit");
Console.ReadLine();
}
public static List<PipesList> RemoveTheSmallPipes(List<PipesList> lstPipeTypes)
{
//Place your code in here
//It should remove all pipes that have lengths lower than 19.
foreach (var pipeList in lstPipeTypes)
{
foreach (var pipe in pipeList.Pipes)
{
lstPipeTypes.RemoveAll(i => pipe.length < 19);
}
}
return lstPipeTypes;
}
}
class PipesList
{
public string pipeType;
public List<Pipe> Pipes;
public PipesList(string newBoxType)
{
pipeType = newBoxType;
Pipes = new List<Pipe>();
}
}
class Pipe
{
public string name;
public float length;
public Pipe(string newName, float newLength)
{
this.name = newName;
this.length = newLength;
}
}
您的PipesList
类是internal
,因此它仅对同一程序集中的其他代码可见。您的RemoveTheSmallPipes
方法是公开的,但在其签名中引用PipesList
。这是不允许的。
要么将RemoveTheSmallPipes
方法设为内部方法,要么PipesList
公开。
顺便说一下,您的实现也有些奇怪。目前还不清楚为什么你有两个级别的循环和一个RemoveAll
调用,但你没有在lambda表达式的主体中使用lambda表达式参数(i
)这一事实是非常可疑的。目前尚不清楚您要做什么,但我认为您的代码目前没有达到您的期望......
编辑:根据您的描述,我怀疑身体应该看起来像这样:
foreach (var pipeList in lstPipeTypes)
{
pipeList.Pipes.RemoveAll(pipe => pipe.length < 19);
}
Pipe 和 PipesList 类不是公共的,但由公共方法返回。
class PipesList 是内部的(默认情况下),但 RemoveTheSmallPipes() 是公共的。
要么将类 PipesList 设为公共,要么在内部删除 TheSmallPipes()。
- 编译器显示以下错误:"
可访问性不一致:返回类型System.Collections.Generic.List
比方法Program.RemoveTheSmallPipes(System.Collections.Generic.List)
更难访问 "
这是指各自类型的可见性:你的返回类型List<PipesList>
是内部的(因为泛型参数PipesList
是内部的),但你的方法是公共的(即比内部更明显)。使方法内部,则此编译器错误消息应消失。 - 您的
RemoveTheSmallPipes
方法可能会引发异常;您不应该在迭代集合时更改集合。