Можете ли вы использовать массив для Switch (case)? - PullRequest
0 голосов
/ 30 ноября 2011

Я начал курс Uni и не могу понять, как использовать мой массив для переключения.По сути, мне просто нужна помощь с распределительным шкафом, тогда я смогу продолжить свою работу.Вот как это выглядит до сих пор:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Serialization;

namespace Assignment2
{
 class Program
  {
    public const int noOfentries = 6;
    public const int address = 5;
    public static string[,] addressBook = new string[noOfentries, address];//
    string array for the address book
    public static int deletion;
    public static int choice;
    public static ConsoleKeyInfo keyPressed;
    public static short curItem = 0, c;
    public static string[,] menuItems = new string[,]
    { 
        {"Add Entry"},
        {"Delete Entry"},
        {"Print Book to Screen"},
        {"Edit Contact"}, 
        {"Exit"} 
    };


    #region addEntry
    #endregion
    #region deleteEntry
    #endregion
    #region seeBook
    #endregion
    public static void fourthChoice()
    {
        Console.WriteLine("Would you like to edit the name or address?");

    }

    public static void menu()
    { 
        for (int i = 0; i < 5; i++)
        {
            Console.WriteLine(menuItems[i,0].PadRight(10));
            Console.Clear();
            for (c = 0; c < menuItems.Length; c++)
            {
                if (curItem == c)
                {
                    Console.Write(">");
                    Console.WriteLine(menuItems[c,0]);
                    Console.ForegroundColor = ConsoleColor.Green;
                }

                else
                {
                    Console.WriteLine(menuItems[c,0]);
                }
            }
            Console.WriteLine("Please select an option with the Arrow Keys");
         }
    }
    public static void entries()
    {
        switch (menuItems[0,0])
        {
            case "Add Entry":
                break;
            case "Delete Entry":
                break;
            case "Print Book to Screen":
                break;
            case "Edit Contact":
                break;
            case "Exit":
                break;

        }
    }

Ответы [ 2 ]

3 голосов
/ 30 ноября 2011

Вы должны использовать Enum для этого:

private Enum myEnum { Add, Delete, Edit }

void main(myEnum state)
{
    switch (state)
    {
       Add: //do things
            break;
       Edit: //do things
            break;
       Delete: //do things
               break;
    }
}
3 голосов
/ 30 ноября 2011

У переключателя / кейса есть два аспекта:

  • Значение, которое вы включаете
  • Кейсы, к которым вы хотите перейти

Тот факт, что вы получаете значение из массива, не имеет значения.Это эквивалентно:

string value = menuItems[0, 0];
switch (value)
{
}

Ваши случаи также являются постоянными строковыми значениями, так что это тоже хорошо.(Там есть дублирование, приводящее к хрупкому коду, который вы, возможно, захотите устранить, но это отдельный вопрос.)

... и это нормально.Не совсем понятно, какая у вас проблема в данный момент, хотя также неясно, почему у вас вообще есть прямоугольный массив, учитывая, что у вас есть только один «столбец» на строку.Почему бы просто:

public static string[] menuItems = new string[]
{ 
    "Add Entry",
    "Delete Entry",
    "Print Book to Screen",
    "Edit Contact", 
    "Exit"
};

(Оставляя в стороне наименование, доступность, изменчивость и т. Д.)

...