我的一个项目有一个值类型/结构,它表示视频格式的自定义标识符字符串。在这种情况下,它将包含一个内容类型字符串,但这可能会有所不同。
我使用了一个结构,因此它在传递时可以是强类型,并对初始字符串值执行一些完整性检查。实际的字符串值可以是任何东西,并且由外部插件库提供,因此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");
这似乎在大多数情况下都有效,除了一个开关块,它说值必须是一个常数。有什么方法可以直接在 switch 块中使用这种类型和静态值,而无需打开内部成员或.ToString()
覆盖?
有没有更好的整体方法来做到这一点,而不使用enum
用数值或纯字符串常量指定的设计时间?