Как сделать свойство или что-то для хранения конкретных данных .net - PullRequest
1 голос
/ 10 мая 2011

У меня есть класс, который содержит некоторые свойства Мне нужно одно из этих свойств, чтобы хранить только некоторые значения

означает, что когда мне нужно установить значение, мне нужно принять только значение из уже определенного перечисления

поэтому, когда я использую класс и это свойство, я могу использовать только значение из enum

Мне просто нужно убедиться, что это свойство не содержит других значений, которые я не знаю в моем перечислении

Если есть какое-либо решение, кроме использования свойства, все в порядке:)

Ответы [ 4 ]

2 голосов
/ 10 мая 2011

Я не уверен, правильно ли я вас понял, но разве вы просто не хотите этого:

enum MyEnum 
{
  MyValue1,
  MyValue2
}    

class Test
{
  public MyEnum MyProperty { get; set; }
}

Другим способом было бы определить свойство как string или int (или любой тип, на котором основано ваше перечисление) и проверить, является ли значение допустимым в соответствии с перечислением:

string _value;

public string MyProperty 
{
  get{return _value;}
  set {
   if (Enum.GetName(typeof(MyEnum), _value)==null) 
      throw new ArgumentException("Unknown Value")
   _value=value;
   }
}

Если вы задаете целочисленное свойство, вы можете использовать Enum.IsDefined(), чтобы проверить, является ли целочисленное значение допустимым для этого перечисления.

Вы также можете рассмотреть возможность использования C # 4.0 кодовых контрактов .

2 голосов
/ 10 мая 2011
private int _field
public int Property
{
    get{ return _field;}
    set{
        if (Enum.GetValues(typeof(SomeEnum))).Contains(value))
            _field = value;
        else 
            _field = 0;
        }
}
1 голос
/ 10 мая 2011

Вы имеете в виду это:

public enum SomeEnum { item1, item2, item3 };
public class Myclass
{
    private SomeEnum enumItem;
    public SomeEnum EnumItem
    {
        get { return enumItem; }
        set { enumItem = value; }
    }
}
0 голосов
/ 10 мая 2011

Есть несколько библиотек проверки объектов.Я хотел бы предложить вам NHibernate Validator.

Может показаться, что он зависит от NHibernate, но его можно использовать автономно.

NH Validator и другие ориентированы на атрибуты, поэтомуВы можете разместить атрибут для своих свойств, а затем, вызвав механизм проверки, вы сможете убедиться, что какое-либо свойство объекта будет содержать ожидаемое значение или любое другое правило проверки.

Подробнее см. здесь:

РЕДАКТИРОВАТЬ: я забыл упомянуть, что NH Validator имеет API расширяемости, так что вы можете реализовать свои собственные правила проверки, факт, который должен иметь смысл для вас!

...