2011-05-10 20 views
1

我已經持有一些屬性,我需要這些屬性之一,僅持有一些價值類如何使財產或任何持有特定數據.NET

意思,當我需要設置一個值,我需要從已定義枚舉

所以當我使用類只接受值,並在此屬性我只能從枚舉

使用值我只需要確保這個屬性不持有其他值是我不知道在我的枚舉

如果有任何解決方案,而不是使用屬性它是好的:)

回答

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代碼合同

+0

非常感謝我使用它的第一個代碼,它的工作原理非常好,謝謝:) – AshOoO 2011-05-10 09:00:23

0

有一些對象驗證庫。我想建議你NHibernate驗證器。

它可能聽起來像它與NHibernate的依賴關係,但它可以單獨使用。 NH Validator和其他人都是屬性導向的,所以你可以爲你的屬性放置一個屬性,然後通過調用一個驗證引擎,你可以確保某些對象屬性可以保持一些期望值或任何其他驗證規則。

這裏瞭解更多:

編輯:我忘了提NH驗證具有可擴展API,以便您可以實現自己的驗證規則,事實上,應該讓你感覺!

1

你的意思是這樣的:

public enum SomeEnum { item1, item2, item3 }; 
public class Myclass 
{ 
    private SomeEnum enumItem; 
    public SomeEnum EnumItem 
    { 
     get { return enumItem; } 
     set { enumItem = value; } 
    } 
} 
2
private int _field 
public int Property 
{ 
    get{ return _field;} 
    set{ 
     if (Enum.GetValues(typeof(SomeEnum))).Contains(value)) 
      _field = value; 
     else 
      _field = 0; 
     } 
}