C#学习教程:可与switch()一起使用的自定义结构/类型一个标识符字符串。在这种情况下,它将包含一个内容类型字符串,但这可能会有所不同。我使用了一个结构,因此它在传递时可以是强类型的,并对初始字符串值执行一些健全性检查。实际的字符串值可以是任何东西,由外部插件库提供,因此数字枚举不适用。publicstructVideoFormat{privatestringcontentType;publicVideoFormat(stringcontentType){这个。内容类型=内容类型;}publicstringContentType{get{返回这个。内容类型;}}publicoverridestringToString(){返回这个。内容类型;}//用于隐式转换到/从字符串和比较的各种静态方法}由于有一些非常常见的格式,我将它们公开为具有默认值的静态只读字段。publicstaticreadonlyVideoFormatUnknown=newVideoFormat(string.Empty);publicstaticreadonlyVideoFormatJPEG=newVideoFormat("image/jpeg");publicstaticreadonlyVideoFormatH264=newVideoFormat("video/h264");这似乎适用于大多数情况,除了switch块,它表明该值必须是常量。有什么方法可以直接在switch块中使用这种类型和静态值,而无需展开内部成员或.ToString()覆盖?如果不使用设计时指定的枚举和数字或纯字符串常量,是否有更好的整体方法?更新:由于C#7中switch语句的新规则,这个答案不再完全准确。有关详细信息,请参阅C#7文档。有没有办法在switch块中直接使用这个类型和静态值否switch语句的托管类型必须是sbyte,byte,short,ushort,int,uint,long,ulong,char的可空值类型之一、bool、任何枚举或字符串。case标签中使用的常量必须是与托管类型兼容的编译时常量。事实上,重构代码可能更好,这样您就根本不必使用switch语句。虽然构造本身不是反模式,但使用多态性是普遍接受的做法。这是关于摆脱开关的方法的另一个讨论。在我看来,您使用的所有可能的视频格式都是使用枚举的典型示例。在添加其他格式时,我真的没有看到用新值扩展枚举有什么问题。是的,重要的是我们需要确保程序中使用的任何VideoFormat都应符合枚举。但可能这不会是一个缺点。以上就是C#学习教程的全部内容:可与switch()一起使用的自定义结构体/类型。如果对你有用,需要了解更多C#学习教程,希望大家多加关注——本文来自网络合集,不代表立场,如涉及侵权,请右击联系管理员删除。如需转载请注明出处:
