如何制作属性或任何保存特定数据.net

时间:2011-05-10 08:28:59

标签: c# .net collections properties

我有一个包含某些属性的类,我需要其中一个属性来保存一些值

表示当我需要设置一个值时,我只需要接受已经定义的枚举值

因此,当我使用该类并在此属性上时,我只能使用枚举

中的值

我只需要确保此属性不包含我在枚举中不知道的其他值

如果除了使用属性之外还有任何其他解决方案,那么可以:)

4 个答案:

答案 0 :(得分:2)

private int _field
public int Property
{
    get{ return _field;}
    set{
        if (Enum.GetValues(typeof(SomeEnum))).Contains(value))
            _field = value;
        else 
            _field = 0;
        }
}

答案 1 :(得分:2)

我不确定我是否理解你,但你不是只想要这个:

enum MyEnum 
{
  MyValue1,
  MyValue2
}    

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

另一种方法是将属性定义为stringint(或您的枚举所基于的任何类型),并根据枚举检查值是否有效:

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 :(得分:1)

你的意思是:

public enum SomeEnum { item1, item2, item3 };
public class Myclass
{
    private SomeEnum enumItem;
    public SomeEnum EnumItem
    {
        get { return enumItem; }
        set { enumItem = value; }
    }
}

答案 3 :(得分:0)

有一些对象验证库。我想建议你NHibernate Validator。

听起来它可能与NHibernate有依赖关系,但它可以单独使用。

NH Validator和其他人是面向属性的,因此您可以为您的属性放置一个属性,然后通过调用验证引擎,您将能够确保某些对象属性将保留一些预期值或任何其他验证规则

在此处了解详情:

编辑:我忘了提到NH Validator有一个扩展性API,所以你可以实现自己的验证规则,这对你来说应该是有意义的!