根据条件从列表中删除项目

本文关键字:删除项目 列表 条件 | 更新日期: 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()。

  1. 编译器显示以下错误:"

    可访问性不一致:返回类型 System.Collections.Generic.List 比方法 Program.RemoveTheSmallPipes(System.Collections.Generic.List) 更难访问 "

    这是指各自类型的可见性:你的返回类型List<PipesList>是内部的(因为泛型参数PipesList是内部的),但你的方法是公共的(即比内部更明显)。使方法内部,则此编译器错误消息应消失。

  2. 您的RemoveTheSmallPipes方法可能会引发异常;您不应该在迭代集合时更改集合。