Перечисление и индексы массива? - PullRequest
0 голосов
/ 17 апреля 2009

Я работаю над этим домашним заданием и испытываю затруднения с пониманием текста, объясняющего, как правильно принять доступное значение перечисления и затем применить к нему значение массива строк. Можете ли вы помочь мне понять это? Текст, который мы используем, очень сложен и плохо написан для начинающего, поэтому я здесь сам по себе. У меня есть первые написанные части, но мне нужна помощь по доступу к значению перечисления и присвоению, я думаю, что я близок, но не понимаю, как правильно получить и установить значения для этого.

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

namespace Unit_4_Project
{
    public class MyCourses
    {

        // enumeration that contains an enumeration of all the courses that 
        // student is currently enrolled in
        public enum CourseName
        {
            IT274_01AU,
            CS210_06AU
        }

        // array field that provides short description for each of classes, 
        // returns string description of the course
        private String[] courseDescription = 
         {"Intermediate C#: Teaches intermediate elements of C# programming and software design",
          "Career Development Strategies: Teaches principles for career progression, resume preparation, and overall self anaylsis"};

        // indexer that takes one of the enumerated courses as an index 
        // and returns the String description of the course
        public String this[CourseName index]
        {
            get
            {
                if (index == 1)
                    return courseDescription[0];
                else
                    return courseDescription[1];
            }
            set
            {
                if (index == 1)
                    courseDescription[0] = value;
                else
                    courseDescription[1] = value;
            }
        }

    }


}//end public class MyCourses

Ответы [ 5 ]

1 голос
/ 17 апреля 2009

Перечисления неявно преобразуются в целые. Но вы можете явно конвертировать их.

public String this[CourseName index]
{
  get { return courseDescription[(int)index]; }
  set { courseDescription[(int)index] = value; }

Если вы собираетесь использовать перечисления таким образом, вы должны определить фактическое числовое значение, которое они представляют.

public enum CourseName
{
  IT274_01AU = 0,
  CS210_06AU = 1
}

Хотя текущая реализация перечислений будет работать, ничто не говорит о том, что так будет и в будущем.

1 голос
/ 17 апреля 2009

Вы близки, вы просто немного сошли с ума в конце. CourseName - это не что иное, как число. Вы можете индексировать прямо в свой массив courseDescription ...

courseDescription[(int)index]

и у вас это есть. :)

0 голосов
/ 17 апреля 2009

Хитрость в том, что перечисления являются составными типами данных по своей сути. Это означает, что вы можете переходить назад и вперед между Enum и Int32, если вы хотите сделать это:

Вам необходимо изменить раздел "get" на:

public String this[CourseName index]
{
    get {
        return courseDescription[(int)index];
    }        
}

Это работает, так как перечисление в основном эквивалентно:

public enum CourseName
{
    IT274_01AU = 0,
    CS210_06AU = 1
}
0 голосов
/ 17 апреля 2009

Вот мой ответ от CodeGuru:

Перечисления строго типизированы, поэтому вы не можете сравнить их с int напрямую. Однако вы можете привести перечисление к типу int. Таким образом, вы получите это вместо:

if ( ( ( int ) index ) == 1)
     return courseDescription[0];
else
     return courseDescription[1];
0 голосов
/ 17 апреля 2009

Что вам не хватает, так это то, что перечисления преобразуются в целые. (На самом деле, под ними они в основном целые.)

И массивы могут быть проиндексированы с помощью целых чисел.

Попробуйте проиндексировать ваш массив с параметром типа вашего перечисления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...