C#使用Enum.TryParse()實(shí)現(xiàn)枚舉安全轉(zhuǎn)換
在項(xiàng)目中,有時(shí)候會用到領(lǐng)域枚舉和DTO枚舉的映射和轉(zhuǎn)換。有一個(gè)現(xiàn)實(shí)的問題是:如果領(lǐng)域枚舉項(xiàng)發(fā)生變化,而DTO枚舉項(xiàng)沒有及時(shí)更新,這樣會造成映射不上的問題。那么,如何避免此類問題呢?
先看領(lǐng)域枚舉和DTO枚舉映射完好的情況。
class Program { static void Main(string[] args) { var queryOrderStatus = (QueryOrderStatus)OrderState.Active; Console.WriteLine(queryOrderStatus); Console.ReadKey(); } } public enum OrderState { NotActivated, Active, RequiresReActivation } public enum QueryOrderStatus { NotActivated, Active, RequiresReActivation }
輸出結(jié)果:Active
假如,我們在領(lǐng)域模型中加了一個(gè)枚舉項(xiàng)
public enum OrderState { NotActivated, Active, RequiresReActivation, Locked }
在客戶端。
class Program { static void Main(string[] args) { var queryOrderStatus = (QueryOrderStatus)OrderState.Locked; Console.WriteLine(queryOrderStatus); Console.ReadKey(); } }
輸出結(jié)果:3
如果再把客戶端改成這樣:
class Program { static void Main(string[] args) { var queryOrderState = (QueryOrderStatus)OrderState.Locked; if(queryOrderState == QueryOrderStatus.Active) Console.WriteLine("Active"); if(queryOrderState == QueryOrderStatus.NotActivated) Console.WriteLine("NotActivated"); if(queryOrderState == QueryOrderStatus.RequiresReActivation) Console.WriteLine("RequiresReActivation"); Console.ReadKey(); } }
輸出結(jié)果:什么都沒有
也就是說,在領(lǐng)域枚舉發(fā)生變化的時(shí)候,DTO枚舉沒有適時(shí)更新,會造成映射不上的問題。如何避免呢?
--使用Enum.TryParse()實(shí)現(xiàn)枚舉的安全轉(zhuǎn)換
使用Enum.TryParse(),把客戶端改成:
class Program { static void Main(string[] args) { var domainState = OrderState.Locked; QueryOrderStatus queryState; if (!Enum.TryParse(domainState.ToString(), out queryState)) { throw new FormatException("枚舉項(xiàng) '"+domainState+"' 在對應(yīng)的DTO中不存在" ); } Console.ReadKey(); } }
運(yùn)行報(bào)錯(cuò):
這正是我們預(yù)設(shè)的報(bào)錯(cuò)方式。
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接
- c#中(int)、int.Parse()、int.TryParse、Convert.ToInt32的區(qū)別詳解
- C#(int)中Convert、Parse、TryParse的區(qū)別
- C#字節(jié)數(shù)組(byte[])和字符串相互轉(zhuǎn)換方式
- C#中對象與JSON字符串互相轉(zhuǎn)換的三種方式
- c#?如何將字符串轉(zhuǎn)換為大寫或小寫
- C#中字符串與字節(jié)數(shù)組的轉(zhuǎn)換方式
- C#日期格式字符串的相互轉(zhuǎn)換操作實(shí)例分析
- C# 字符串、數(shù)組和List的截取和轉(zhuǎn)換實(shí)例
- C#實(shí)現(xiàn)char字符數(shù)組與字符串相互轉(zhuǎn)換的方法
- C# 中 TryParse如何將字符串轉(zhuǎn)換為特定類型