亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

記錄個人一直以來對枚舉定義和使用的兩個誤解

2019-11-17 01:36:37
字體:
來源:轉載
供稿:網友

記錄個人一直以來對枚舉定義和使用的兩個誤解

1、枚舉定義聲明基礎類型的限制

想要定義一個表示數據庫主鍵編號范圍的枚舉:

    /// <summary>    /// 編號范圍枚舉    /// </summary>    public enum IDRangeType : Int64    {        /// <summary>        /// 1到2的32次方        /// </summary>        [Descr

但是上面這種聲明直接導致編譯錯誤:應輸入類型 byte、sbyte、short、ushort、int、uint、long 或 ulong

也就是說,枚舉的基礎類型只能為8種數字類型: byte、sbyte、short、ushort、int、uint、long 或 ulong。聲明為其他類型如Int16、Int32、Int64等都不行。

按照VS編譯提示,將Int64改為long,果然通過,真是奇哉怪也。

我們平時理解的Int64和long其實在MS .Net Framework中是沒有區別的,long只是Int64的一個別名而已(而java的基元值類型的包裝類都是引用類型),而且Framework編程規范里還明確說推薦使用Int64,這樣可以保證跨語言或者跨平臺代碼移植方便。但是在枚舉聲明這里,只能使用別名。

順帶再提一下.NET Framework中非常特殊的一個類型System.Enum,它是個引用類型,Framework中將System.Enum定義為一個抽象類,但是它又繼承自System.ValueType。

通過類型判斷,卻又發現它不是ValueType,而且也不是枚舉:

            var num = new Int32();            Console.WriteLine(num is ValueType); //True            Console.WriteLine(num.GetType().IsValueType); //True            var type = typeof(System.Enum);            Console.WriteLine(type.IsValueType); //False ???            Console.WriteLine(type.IsEnum); //False ???

C#語言特性中有很多特例存在,System.Enum即為一例。

2、web服務的客戶端代理和服務端的枚舉數值定義不一致

還以上面的枚舉作為示例,我們要在一個標識為WebMethod的web服務方法中使用這個枚舉,新建一個web服務并部署好以后供客戶端調用。

通過WSDL工具,直接將這個web服務生成保存為本地代理類,然后查看代理類源代碼,客戶端代理類生成的枚舉IDRangeType竟然變成:

    public enum IDRangeType : long    {        Between1ToPowerOf32,        BetweenPowerOf32ToPowerOf40,        Bigger,    }

客戶端生成的枚舉,沒有把服務端枚舉定義中顯式定義的數值帶過來。對于IDRangeType這種定義枚舉就是要使用枚舉的數值而言,簡直太出乎人的意料之外。

然后想到可能是序列化和反序列化的問題,嘗試著給枚舉屬性分別加上特性DataMember和EnumMember,問題依舊。但在WCF試驗中發現一切正常,打開WCF生成的客戶端代理類,枚舉數值的定義和服務端沒什么變化。

后來想想又搞不明白,枚舉既然是繼承自基元值類型,那么值類型怎么序列化,枚舉也應該像基元值類型一樣序列化才對,而且一直說服務分享 Schema(for structures) 和 Contract(for behaviors), 而不是 Class,難道枚舉不是Schema和Contract的一部分,或者是SOAP的.NET實現不支持枚舉?

試驗多次久久不能解決問題,最后搜索一下.net web服務和枚舉這兩個關鍵字,發現果然很早就有一篇流傳甚廣的Web Services and C# Enums文章講到“Numeric Values Are Not PReserved”這個事情。文章還有提到,在web服務中,Flag標記下的枚舉在客戶端生成的時候數值改變,很容易導致災難后果(This can lead to disastrous consequences)。

通過這個問題,讓我深深意識到服務端和客戶端生成代碼的差異,不同環境不同應用場景下,有些特殊情況很容易偏離習慣認知和主觀判斷,必須多嘗試實踐才能出真知。

參考:

http://ikriv.com/dev/dotnet/webservices_and_enums.html

http://msdn.microsoft.com/zh-cn/library/System.Web.Services(v=vs.110).aspx

http://msdn.microsoft.com/zh-cn/library/sbbt4032.aspx

http://msdn.microsoft.com/zh-cn/library/aa347875(v=vs.110).aspx


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲国产古装精品网站| 国产精品人人做人人爽| 国产精品美女www爽爽爽视频| 久久夜色精品亚洲噜噜国产mv| 亚洲欧美在线x视频| 亚洲人成五月天| 一区二区在线视频| 一区二区三区动漫| 欧美性少妇18aaaa视频| 久久99热精品这里久久精品| 欧美大片在线看免费观看| 色香阁99久久精品久久久| 国产精品久久久久久久av电影| 日韩电影中文字幕av| 欧美日韩一区免费| 亚洲欧美中文日韩在线| 欧美日韩爱爱视频| 国内精品视频久久| 精品亚洲va在线va天堂资源站| 日韩色av导航| 亚洲中国色老太| 欧美美最猛性xxxxxx| 国产精品久久久久久久久久久久久久| 欧美性xxxxx极品| 色狠狠av一区二区三区香蕉蜜桃| 在线色欧美三级视频| 国产精品网站入口| 久久人人爽人人| 成人疯狂猛交xxx| 国产成人精品国内自产拍免费看| 久久国产精品久久久久| 91av在线播放视频| 欧美老少配视频| 狠狠色噜噜狠狠狠狠97| 国产精品国产自产拍高清av水多| 日韩在线观看网站| 色阁综合伊人av| 韩剧1988在线观看免费完整版| 欧美精品日韩三级| 国产综合福利在线| 日韩最新av在线| 成人乱人伦精品视频在线观看| 欧美成人精品一区| 欧美一级大片在线免费观看| 超薄丝袜一区二区| 欧美视频专区一二在线观看| 4438全国亚洲精品在线观看视频| 欧美日韩xxxxx| 久久这里只有精品99| 国产亚洲精品高潮| 中文字幕在线看视频国产欧美在线看完整| 欧美性jizz18性欧美| 2018国产精品视频| 日韩免费av在线| 欧美日韩亚洲91| 亚洲国产欧美一区二区三区同亚洲| 亚洲摸下面视频| 日韩在线观看精品| 欧美精品videos另类日本| 日韩av观看网址| 色偷偷偷综合中文字幕;dd| 情事1991在线| 美女黄色丝袜一区| 日日噜噜噜夜夜爽亚洲精品| 国产精品国产三级国产aⅴ浪潮| 亚洲综合一区二区不卡| 亚洲国产一区二区三区在线观看| 亚洲欧美资源在线| 91国产精品91| 国产精品女视频| 精品国产成人av| 欧美最猛性xxxxx(亚洲精品)| 91在线免费视频| 久久天堂电影网| 欧美精品videosex性欧美| 国产v综合ⅴ日韩v欧美大片| 神马国产精品影院av| 欧美福利视频在线观看| 欧美男插女视频| 日韩免费在线电影| 黑人极品videos精品欧美裸| 国产日韩欧美91| 爽爽爽爽爽爽爽成人免费观看| 日韩欧美视频一区二区三区| 精品国内产的精品视频在线观看| 精品国模在线视频| 久久久精品一区| 国产精品欧美日韩一区二区| 日韩中文有码在线视频| 欧美成人免费视频| 久久这里只有精品视频首页| 国产成人精品优优av| 亚洲精品国产精品国自产在线| 欧美日产国产成人免费图片| 国产黑人绿帽在线第一区| 最新国产精品亚洲| 精品在线欧美视频| 亚洲丝袜在线视频| 在线观看欧美日韩国产| 亚洲成人久久电影| 国产精品成人播放| 97视频在线观看播放| 亚洲成av人影院在线观看| 欧美大尺度电影在线观看| 亚洲精品福利视频| 欧美一级电影免费在线观看| 欧美成人午夜免费视在线看片| 亚洲成av人片在线观看香蕉| 日韩av在线播放资源| 北条麻妃99精品青青久久| 欧美午夜电影在线| 国产精品一区二区三| 亚洲午夜精品久久久久久久久久久久| 欧美性资源免费| 亚洲人成毛片在线播放| 91精品国产乱码久久久久久蜜臀| 欧美黑人巨大xxx极品| 国产精品久久999| 中文字幕无线精品亚洲乱码一区| 国产日韩欧美夫妻视频在线观看| 亚洲欧美国产精品va在线观看| 亚洲色无码播放| 久久精品久久久久久国产 免费| 97在线视频免费看| 国产精品日韩专区| 欧美专区国产专区| 91tv亚洲精品香蕉国产一区7ujn| 日本久久久久亚洲中字幕| 国产精品免费视频久久久| 国产视频精品va久久久久久| 国产一区二区三区四区福利| 国产精品一区二区av影院萌芽| 亚洲二区中文字幕| 少妇高潮 亚洲精品| 国产精品爽爽爽| 日韩精品在线免费| 亚洲v日韩v综合v精品v| 国产精品精品久久久久久| 亚洲免费中文字幕| 国产色婷婷国产综合在线理论片a| 日韩精品视频在线观看网址| 一区国产精品视频| 亚洲精品久久久久| 4p变态网欧美系列| 欧美亚洲另类激情另类| 精品国产鲁一鲁一区二区张丽| 精品美女国产在线| 欧美人与物videos| 欧美国产日韩在线| 欧美诱惑福利视频| 热久久视久久精品18亚洲精品| 亚洲3p在线观看| 日韩成人在线视频网站| 国产精品www色诱视频| 91久久精品国产91久久| 国产精品第三页| 亚洲免费av网址| 伊人av综合网| 伊人男人综合视频网| 久久精品国产一区| 精品少妇一区二区30p| 欧美性猛交丰臀xxxxx网站| 日韩美女视频免费在线观看| 亚洲日本欧美中文幕|