我有一个包含某些属性的类,我需要其中一个属性来保存一些值
表示当我需要设置一个值时,我只需要接受已经定义的枚举值
因此,当我使用该类并在此属性上时,我只能使用枚举
中的值我只需要确保此属性不包含我在枚举中不知道的其他值
如果除了使用属性之外还有任何其他解决方案,那么可以:)
答案 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; }
}
另一种方法是将属性定义为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 :(得分: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,所以你可以实现自己的验证规则,这对你来说应该是有意义的!