2011-07-10 25 views
1

我有這樣一個類:我該如何做到這一點,所以我的類變量只能設置爲三種選擇之一?

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

我想有些東西添加到類,但我不知道該怎麼做。我想要的是隻能將高度設置爲「高」或「短」。也許在未來會有更多的事情,但現在這將是兩者之間的選擇。另外我希望它在構造函數中默認爲「Short」。我想我會需要使用枚舉,但我不知道如何 做到這一點。

有人可以解釋。我非常感謝。

+0

你什麼是枚舉在C#是什麼?如果不是請在這[文章](http://msdn.microsoft.com/en-us/library/sbbt4032(v = VS.100).aspx) – guyl

回答

4

您可以定義與可能值的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; } 
} 

現在,當你有元類的一個實例您可以將Height屬性設置爲Tall或Short:

var meta = new Meta(); 
meta.Height = HeightTypes.Tall; 
+0

小問題(主要針對OP):enum值不會自動驗證;你可以指定既不高也不短的其他值 –

9

是的,你可以使用一個枚舉:

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); 

但它顯然對任何呼叫者沒有意義。

+0

請原諒我的無知,但爲什麼要檢查'enum'參數。這是不是足夠強大的類型? – InBetween

+0

@InBetween:不,它不是。查看答案結尾處的位 - 我們不希望允許'(Height)1000'作爲屬性值,但是在正常基礎設施內不會阻止它。 –

+0

哦哇,我actaully認爲(身高)1000會拋出哪些恕我直言應該是預期的行爲,因爲身高不定義的價值。有點困惑爲什麼這個演員是允許的。 – InBetween

相關問題