1

私は学校のプロジェクトに取り組んでいます。ユーザーは、Persons オブジェクトを入力して、それらを Person 型の List に格納できます。別のクラスからリストを呼び出すと、リストが空になることを期待してください。

class SubMenu
{
    CreatePersons cp;
    List<Person> myList = new List<Person>();
    public List<Person> MyList
    {
        get { return myList; }
    }

    string UserInput= null;
    public void SMenu()
    {

        Boolean flag = true;

        while (true)
        {
            Console.WriteLine("");
            Console.WriteLine(" -------------------------------------------");
            Console.WriteLine(" -|---------------------------------------|-");
            Console.WriteLine(" -|- P. Create a Person                  -|-");
            Console.WriteLine(" -|- S. Create a Student                 -|-");
            Console.WriteLine(" -|- T. Create a Teacher                 -|-");
            Console.WriteLine(" -|- A. Create Administrative Staff      -|-");
            Console.WriteLine(" -|- R. Return to Main Menu              -|-");
            Console.WriteLine(" -|---------------------------------------|-");
            Console.WriteLine(" -------------------------------------------");
            Console.Write(" Enter your choice: ");
            UserInput = Console.ReadLine();

            switch (UserInput.ToLower())
            {
                case "p": myList.Add(new Person("Johnny"));   //For testing
                          Console.WriteLine(myList.Count);    //For testing .. here count = 1 as it should be.
                          break;
                case "s": Console.WriteLine("Creates and object of type Student.");

                    break;

これは、ユーザーが新しい Person を作成するクラスです。テスト用に Person を 1 つ作成しました。問題は、別のクラスからリストを呼び出すと、リストが空で、1 つのピアソンが含まれている必要があることです。これが他のクラスのコードです。

 class MainMenu
    {
         Boolean flag = true;
         SubMenu sm = new SubMenu();
         public void MMenu()
         {
             while (true)
             {
                 Console.WriteLine();
                 Console.WriteLine("Console Application v1.0 created by");
                 Console.WriteLine();
                 Console.WriteLine(" ---------------------------------------------------");
                 Console.WriteLine(" -|-------------- MENU ---------------------------|-");
                 Console.WriteLine(" -|-----------------------------------------------|-");
                 Console.WriteLine(" -|- 1 -  Create a Person                        -|-");
                 Console.WriteLine(" -|- 2 -  List all the Persons                   -|-");
                 Console.WriteLine(" -|- 3 -  Search for a Person                    -|-");
                 Console.WriteLine(" -|- 4 -  Display the number of Persons          -|-");
                 Console.WriteLine(" -|- 5 -  Exit                                   -|-");
                 Console.WriteLine(" ---------------------------------------------------");
                 Console.Write(" Enter your choice: ");
                 string UserInput = Console.ReadLine();
                 Console.WriteLine();

                 int input;
                 if (int.TryParse(UserInput, out input))
                 {
                     switch (input)
                     {
                         case 1:Console.WriteLine("Case 1");
                                sm.SMenu();
                                break;
                         case 2:Console.WriteLine("Case 2");  //This should display the one, the current size of the List.
                                int size = sm.MyList.Count;
                                Console.WriteLine("Size :" + size);

                                break;
                         case 3: Console.WriteLine("Case 3");

問題を簡単に特定できるように、コメントを参照してください。

ご協力いただきありがとうございます。

4

1 に答える 1

0

SMenu変数をstaticに設定せずに呼び出す方法がわからないので、コードに変更を加えようとすると、うまく機能するように見えます....以前に行った値を予約したい場合は、必要です静的

Person定義がわからないので削除します。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication5
{
    class Program
    {
        Boolean flag = true;
        //I can only run it after I set it to static
        static SubMenu sm = new SubMenu();
        static void Main(string[] args)
        {
            while (true)
            {
                Console.WriteLine();
                Console.WriteLine("Console Application v1.0 created by");
                Console.WriteLine();
                Console.WriteLine(" ---------------------------------------------------");
                Console.WriteLine(" -|-------------- MENU ---------------------------|-");
                Console.WriteLine(" -|-----------------------------------------------|-");
                Console.WriteLine(" -|- 1 -  Create a Person                        -|-");
                Console.WriteLine(" -|- 2 -  List all the Persons                   -|-");
                Console.WriteLine(" -|- 3 -  Search for a Person                    -|-");
                Console.WriteLine(" -|- 4 -  Display the number of Persons          -|-");
                Console.WriteLine(" -|- 5 -  Exit                                   -|-");
                Console.WriteLine(" ---------------------------------------------------");
                Console.Write(" Enter your choice: ");
                string UserInput = Console.ReadLine();
                Console.WriteLine();

                int input;
                if (int.TryParse(UserInput, out input))
                {
                    switch (input)
                    {
                        case 1: Console.WriteLine("Case 1");
                            sm.SMenu();
                            break;
                        case 2: Console.WriteLine("Case 2");  //displaying one now if run once
                            int size = sm.MyList.Count;
                            Console.WriteLine("Size :" + size);

                            break;
                        case 3: Console.WriteLine("Case 3");
                            break;
                    }
                }
            }
        }

        class SubMenu
        {
            //CreatePersons cp;
            //replace Person with int
            List<int> myList = new List<int>();
            public List<int> MyList
            {
                get { return myList; }
            }

            string UserInput = null;
            public void SMenu()
            {

                Boolean flag = true;
                //the original while(true) makes me never go out from loop, so I change it.
                do
                {
                    Console.WriteLine("");
                    Console.WriteLine(" -------------------------------------------");
                    Console.WriteLine(" -|---------------------------------------|-");
                    Console.WriteLine(" -|- P. Create a Person                  -|-");
                    Console.WriteLine(" -|- S. Create a Student                 -|-");
                    Console.WriteLine(" -|- T. Create a Teacher                 -|-");
                    Console.WriteLine(" -|- A. Create Administrative Staff      -|-");
                    Console.WriteLine(" -|- R. Return to Main Menu              -|-");
                    Console.WriteLine(" -|---------------------------------------|-");
                    Console.WriteLine(" -------------------------------------------");
                    Console.Write(" Enter your choice: ");
                    UserInput = Console.ReadLine();

                    switch (UserInput.ToLower())
                    {
                        //remove the Person part
                        case "p": myList.Add(1);   //For testing
                            Console.WriteLine(myList.Count);    //Count = 1
                            break;
                        case "s": Console.WriteLine("Creates and object of type Student.");
                            break;
                    }
                } while (false);
            }
        }
    }
}
于 2014-03-28T17:32:05.423 に答える