C#使用Enum.TryParse()實(shí)現(xiàn)枚舉安全轉(zhuǎn)換
在項(xiàng)目中,有時(shí)候會(huì)用到領(lǐng)域枚舉和DTO枚舉的映射和轉(zhuǎn)換。有一個(gè)現(xiàn)實(shí)的問(wèn)題是:如果領(lǐng)域枚舉項(xiàng)發(fā)生變化,而DTO枚舉項(xiàng)沒(méi)有及時(shí)更新,這樣會(huì)造成映射不上的問(wèn)題。那么,如何避免此類(lèi)問(wèn)題呢?
先看領(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
假如,我們?cè)陬I(lǐng)域模型中加了一個(gè)枚舉項(xiàng)
public enum OrderState
{
NotActivated,
Active,
RequiresReActivation,
Locked
}在客戶(hù)端。
class Program
{
static void Main(string[] args)
{
var queryOrderStatus = (QueryOrderStatus)OrderState.Locked;
Console.WriteLine(queryOrderStatus);
Console.ReadKey();
}
}輸出結(jié)果:3
如果再把客戶(hù)端改成這樣:
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é)果:什么都沒(méi)有
也就是說(shuō),在領(lǐng)域枚舉發(fā)生變化的時(shí)候,DTO枚舉沒(méi)有適時(shí)更新,會(huì)造成映射不上的問(wèn)題。如何避免呢?
--使用Enum.TryParse()實(shí)現(xiàn)枚舉的安全轉(zhuǎn)換
使用Enum.TryParse(),把客戶(hù)端改成:
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+"' 在對(duì)應(yīng)的DTO中不存在" );
}
Console.ReadKey();
}
}運(yùn)行報(bào)錯(cuò):

這正是我們預(yù)設(shè)的報(bào)錯(cuò)方式。
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
- c#中(int)、int.Parse()、int.TryParse、Convert.ToInt32的區(qū)別詳解
- C#(int)中Convert、Parse、TryParse的區(qū)別
- C#字節(jié)數(shù)組(byte[])和字符串相互轉(zhuǎn)換方式
- C#中對(duì)象與JSON字符串互相轉(zhuǎn)換的三種方式
- c#?如何將字符串轉(zhuǎn)換為大寫(xiě)或小寫(xiě)
- 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)換為特定類(lèi)型
相關(guān)文章
關(guān)于Unity中RectTransform與transform的區(qū)別
這篇文章主要介紹了Unity中RectTransform與transform的區(qū)別,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-01-01
利用FlubuCore用C#來(lái)寫(xiě)DevOps腳本的方法詳解
這篇文章主要介紹了利用FlubuCore用C#來(lái)寫(xiě)DevOps腳本的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07
WPF利用ValueConverter實(shí)現(xiàn)值轉(zhuǎn)換器
值轉(zhuǎn)換器在WPF開(kāi)發(fā)中是非常常見(jiàn)的,值轉(zhuǎn)換器可以幫助我們很輕松地實(shí)現(xiàn),界面數(shù)據(jù)展示的問(wèn)題。本文將通過(guò)WPF?ValueConverter實(shí)現(xiàn)簡(jiǎn)單的值轉(zhuǎn)換器,希望對(duì)大家有所幫助2023-03-03
C# Winform程序?qū)崿F(xiàn)防止多開(kāi)的方法總結(jié)【親測(cè)】
這篇文章主要介紹了C# Winform程序?qū)崿F(xiàn)防止多開(kāi)的方法,結(jié)合實(shí)例形式總結(jié)分析了C# Winform防止多開(kāi)相關(guān)操作技巧與使用注意事項(xiàng),需要的朋友可以參考下2020-03-03
C#實(shí)現(xiàn)PDF合并的項(xiàng)目實(shí)踐
有時(shí)我們可能會(huì)遇到需要的資料或教程被分成了幾部分存放在多個(gè)PDF文件中,本文主要介紹了C#實(shí)現(xiàn)PDF合并的項(xiàng)目實(shí)踐,具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01
C#語(yǔ)法相比其它語(yǔ)言比較獨(dú)特的地方(二)
這篇文章主要介紹了C#語(yǔ)法相比其它語(yǔ)言比較獨(dú)特的地方(二),本文講解了internal與protected、private、enum、string的==、傳引用等內(nèi)容,需要的朋友可以參考下2015-04-04

