我的一個項目的值類型/結構表示視頻格式的自定義標識符字符串。在這種情況下,它將包含一個內容類型字符串,但可能會有所不同。可以與開關一起使用的自定義結構/類型()
我已經使用了一個結構體,因此當它傳遞時它可以是強類型的,並對初始字符串值執行一些完整性檢查。 實際的字符串值可能是任何東西,並由外部插件庫提供,因此數字enum
不適用。
public struct VideoFormat {
private string contentType;
public VideoFormat(string contentType) {
this.contentType = contentType;
}
public string ContentType {
get { return this.contentType; }
}
public override string ToString() {
return this.contentType;
}
// various static methods for implicit conversion to/from strings, and comparisons
}
由於有幾個非常常見的格式,我已經露出使用默認值這些靜態只讀域。
public static readonly VideoFormat Unknown = new VideoFormat(string.Empty);
public static readonly VideoFormat JPEG = new VideoFormat("image/jpeg");
public static readonly VideoFormat H264 = new VideoFormat("video/h264");
這似乎工作在大多數情況下,除了開關塊,它說,值必須是一個常數。有什麼方法可以直接在開關塊中使用此類型和靜態值,而無需打開內部部件或重寫?
有沒有更好的整體方法來做到這一點,而不使用設計時間enum
與數值或純字符串常量?
爲什麼不使用else if語句而不是switch語句? – Nathan 2013-03-18 23:22:22
@Nathan'if ... else'是一個選項,但我歷史上首選'switch',其條件是多個並且「固定」 – Deanna 2013-03-18 23:26:54
我已經刪除了詢問最佳方法以公開常見值並移動的位它來[這個問題](http://stackoverflow.com/q/15489000/588306)。 – Deanna 2013-03-18 23:42:44