0

下面是我班的代码。该代码创建一个 ArrayList。然后它向 ArrayList 添加一些“PipesList”,在每个列表中添加管道。

我想编写一个方法 -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;
    }
}
4

4 回答 4

4

您的PipesList类是internal,因此它仅对同一程序集中的其他代码可见。您的RemoveTheSmallPipes方法是publicPipesList ,但在其签名中引用。这是不允许的。

要么将RemoveTheSmallPipes方法设为内部,要么PipesList公开。

顺便说一句,您的实现也有些奇怪。不清楚为什么会有两个级别的循环一个RemoveAll调用,但是您没有在 lambda 表达式i的主体中使用 lambda 表达式参数 ( ) 的事实非常可疑。目前尚不清楚您要做什么,但我认为您的代码目前没有达到您的预期......

编辑:根据你的描述,我怀疑身体应该是这样的:

foreach (var pipeList in lstPipeTypes)
{
    pipeList.Pipes.RemoveAll(pipe => pipe.length < 19);
}
于 2012-06-11T11:47:46.530 回答
0

您的 Pipe 和 PipesList 类不是公共的,而是由公共方法返回的。

于 2012-06-11T11:48:23.893 回答
0

类 PipesList 是内部的(默认情况下),但 RemoveTheSmallPipes() 是公共的。

要么将类 PipesList 公开,要么将 RemoveTheSmallPipes() 设为内部。

于 2012-06-11T11:49:12.540 回答
0
  1. 编译器显示以下错误:

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

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

  2. 您的RemoveTheSmallPipes方法可能会引发异常;您不应该在迭代它们时更改集合。
于 2012-06-11T11:50:32.053 回答