Как я могу сделать так, чтобы мои переменные класса могли быть установлены только на один из трех вариантов? - PullRequest
1 голос
/ 10 июля 2011

У меня есть такой класс:

public class Meta
{
    public string Height { get; set; }
}

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

Может кто-нибудь объяснить.Я был бы очень признателен.

Ответы [ 3 ]

9 голосов
/ 10 июля 2011

Да, вы можете использовать перечисление:

public enum Height
{
    Short = 0,
    Tall = 1;
}

public class Meta
{
    public Height Height { get; private set; }

    public Meta(Height height)
    {
        if (!Enum.IsDefined(typeof(Height), height))
        {
            throw new ArgumentOutOfRangeException("No such height");
        }
        this.Height = height;
    }
}

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

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

new Meta((Height) 1000);

но это, очевидно, было бы бессмысленно для любых абонентов.

4 голосов
/ 10 июля 2011

Вы можете определить enum с возможными значениями:

public enum HeightTypes
{
    Tall,
    Short
}

, а затем использовать его как тип свойства Height:

public class Meta
{
    public Meta()
    {
        // Set the Height property to Short by default in the constructor
        Height = HeightTypes.Short;
    }
    public HeightTypes Height { get; set; }
}

Теперь, когда у вас есть экземпляр класса Meta, вы можете установить его свойство Height только в Tall или Short:

var meta = new Meta();
meta.Height = HeightTypes.Tall;
2 голосов
/ 10 июля 2011

Определите Enum.

public Enum Heights
{
    Tall,
    Short
}

, а затем определите, что ваше свойство относится к типу enum

public Heights Height { get; set; }

Подробнее см. http://msdn.microsoft.com/en-us/library/system.enum.aspx

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