0

質問はcsharplerによって回答されました。2 つの同じクラスを相互に (MenuMaker クラスで) 作成したとは思いもしませんでした...

バツ

バツ

バツ

私が問題を抱えているコードサンプルは次のとおりです。

namespace MeatMenuProgram
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            MenuMaker menu = new MenuMaker() { Randomizer = new Random() };
            label1.Text = menu.GetMenuItem();
            label2.Text = menu.GetMenuItem();
            label3.Text = menu.GetMenuItem();
            label4.Text = menu.GetMenuItem();
            label5.Text = menu.GetMenuItem();
            label6.Text = menu.GetMenuItem();
        }
    }
}

私はMenuMakerクラスを作りました:

namespace MeatMenuProgram
{
    class MenuMaker
    {
        class MenuMaker {

            public Random Randomizer;
            
            string[] Meats = { "Roast beef", "Salami", "Turkey", "Ham", "Pastrami" };
            
            string[] Condiments = { "yellow mustard", "brown mustard","honey mustard", "mayo", "relish", "french dressing" };
            
            string[] Breads = { "rye", "white", "wheat", "pumpernickel","italian bread", "a roll" };

                public string GetMenuItem() {
                    string randomMeat = Meats[Randomizer.Next(Meats.Length)];

                    string randomCondiment = Condiments[Randomizer.Next(Condiments.Length)];

                    string randomBread = Breads[Randomizer.Next(Breads.Length)];

                    return randomMeat + " with " + randomCondiment + " on " + randomBread;
                
                }
            }
        }
    }

しかし、コンパイルされません。エラーログ:

エラー 1 'MeatMenuProgram.MenuMaker' には 'Randomizer' の定義が含まれていません

エラー 2 'MeatMenuProgram.MenuMaker' には 'GetMenuItem' の定義が含まれておらず、'MeatMenuProgram.MenuMaker' 型の最初の引数を受け入れる拡張メソッド 'GetMenuItem' が見つかりませんでした (using ディレクティブまたはアセンブリ参照がありませんか?)

4

2 に答える 2

1

まず、C# プログラミング規則を使用する必要があります。たとえば、変数、パラメーター、およびフィールドの名前は小文字で始めます。

次に、コードをよく見てください。MeatMenuProgram名前空間が表示されますか? はい。MenuMakerクラスが含まれていますか?はい、そうです。そのクラスにはフィールドが含まれていますrandomizerか? いいえ、違います。という名前の別のクラスが含まれていますMenuMaker。代わりに、内部クラスを削除すると、すべての問題が解消されます。

namespace MeatMenuProgram
{
    class MenuMaker
    {
        public Random randomizer;

        string[] meats =
        { "Roast beef", "Salami", "Turkey", "Ham", "Pastrami" };

        string[] condiments =
        { "yellow mustard", "brown mustard","honey mustard" };

        string[] breads =
        { "rye", "white", "wheat", "pumpernickel" };

        public string GetMenuItem()
        {
            string randomMeat = meats[randomizer.Next(meats.Length)];
            string randomCondiment = condiments[randomizer.Next(condiments.Length)];
            string randomBread = breads[randomizer.Next(breads.Length)];

            return randomMeat + " with " + randomCondiment + " on " + randomBread;
        }
    }
}
于 2013-04-04T19:57:58.463 に答える
0

エラーが示すように、クラスMenuMakerには、アクセスしようとしているプロパティ/メソッドが含まれていません。あなたは〜を持つ必要があります

public string GetMenuItem() { }
public Random Randomizer { get; set; }

クラスでMenuMaker

クラス MenuMaker が同じ名前の別のクラスにネストされている場合は、二重化されたものclass MenuMaker {(および最後の右中括弧) を削除する必要があります。

于 2013-04-04T19:46:31.500 に答える