0

以下は私のクラスのコードです。コードは ArrayList を作成します。次に、多数の「PipesList」を ArrayList に追加し、各リスト内にパイプを追加します。

長さが 19 未満のすべてのパイプを削除するメソッド -RemoveTheSmallPipes を作成したいと考えています。コードがエラーをスローするため:

コンパイラ エラー メッセージ: 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

クラスPipesListinternalであるため、同じアセンブリ内の他のコードにのみ表示されます。あなたのRemoveTheSmallPipesメソッドはpublicPipesListですが、その署名で参照しています。それは許可されていません。

RemoveTheSmallPipesメソッドを内部にするか、公開PipesListします。

ちなみに、あなたの実装もやや奇妙です。2 レベルのループ呼び出しがある理由は不明ですが、ラムダ式の本体内でRemoveAllラムダ式パラメーター ( ) を使用していないという事実は非常に疑わしいです。iあなたが何をしようとしているのかは明らかではありませんが、現時点ではあなたのコードが期待どおりに機能しているとは思いません...

編集:あなたの説明に基づいて、私は体が次のように見えるべきだと思います:

foreach (var pipeList in lstPipeTypes)
{
    pipeList.Pipes.RemoveAll(pipe => pipe.length < 19);
}
于 2012-06-11T11:47:46.530 に答える
0
  1. コンパイラは次のエラーを表示します:

    「一貫性のないアクセシビリティ: 戻り値の型System.Collections.Generic.ListはメソッドよりもアクセスしにくいですProgram.RemoveTheSmallPipes(System.Collections.Generic.List)

    これは、それぞれの型の可視性を示しています: 戻り値の型List<PipesList>internalです(ジェネリック引数PipesListinternalであるため) が、メソッドはpublicです(つまり、内部よりも目立つ)。メソッドをinternalにすると、このコンパイラ エラー メッセージが消えるはずです。

  2. メソッドRemoveTheSmallPipesはおそらく例外をスローします。コレクションを繰り返し処理している間は、コレクションを変更しないでください。
于 2012-06-11T11:50:32.053 に答える
0

Pipe および PipesList クラスはパブリックではありませんが、パブリック メソッドによって返されています。

于 2012-06-11T11:48:23.893 に答える
0

クラス PipesList は内部 (デフォルト) ですが、RemoveTheSmallPipes() は public です。

クラス PipesList を public にするか、RemoveTheSmallPipes() を internal にします。

于 2012-06-11T11:49:12.540 に答える