C#使用Enum.TryParse()實(shí)現(xiàn)枚舉安全轉(zhuǎn)換
在項(xiàng)目中,有時候會用到領(lǐng)域枚舉和DTO枚舉的映射和轉(zhuǎn)換。有一個現(xiàn)實(shí)的問題是:如果領(lǐng)域枚舉項(xiàng)發(fā)生變化,而DTO枚舉項(xiàng)沒有及時更新,這樣會造成映射不上的問題。那么,如何避免此類問題呢?
先看領(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)域模型中加了一個枚舉項(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ā)生變化的時候,DTO枚舉沒有適時更新,會造成映射不上的問題。如何避免呢?
--使用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)行報錯:

這正是我們預(yù)設(shè)的報錯方式。
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(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)換為特定類型
相關(guān)文章
關(guān)于Unity中RectTransform與transform的區(qū)別
這篇文章主要介紹了Unity中RectTransform與transform的區(qū)別,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-01-01
WPF利用ValueConverter實(shí)現(xiàn)值轉(zhuǎn)換器
值轉(zhuǎn)換器在WPF開發(fā)中是非常常見的,值轉(zhuǎn)換器可以幫助我們很輕松地實(shí)現(xiàn),界面數(shù)據(jù)展示的問題。本文將通過WPF?ValueConverter實(shí)現(xiàn)簡單的值轉(zhuǎn)換器,希望對大家有所幫助2023-03-03
C# Winform程序?qū)崿F(xiàn)防止多開的方法總結(jié)【親測】
這篇文章主要介紹了C# Winform程序?qū)崿F(xiàn)防止多開的方法,結(jié)合實(shí)例形式總結(jié)分析了C# Winform防止多開相關(guān)操作技巧與使用注意事項(xiàng),需要的朋友可以參考下2020-03-03
C#實(shí)現(xiàn)PDF合并的項(xiàng)目實(shí)踐
有時我們可能會遇到需要的資料或教程被分成了幾部分存放在多個PDF文件中,本文主要介紹了C#實(shí)現(xiàn)PDF合并的項(xiàng)目實(shí)踐,具有一定的參考價值,感興趣的可以了解一下2024-01-01

