我目前正在嘗試制定一個“TryMapOrReturnDefault”模式,我已經有一個 map 方法,它會在失敗時拋出例外,但在某些情況下我需要讓它回傳一些東西(用戶指定或默認為 null)
但我實際上是如何做到的,
“只是”將 map 方法包裝在 try finally 中似乎是錯誤的,如果觸發了例外,則回傳默認值或者我在這里錯了 - 似乎我在濫用觸發例外的事實,或者是怎么做?
public static CustomModel? TryMapOrDefault(FieldType value, string title, CustomModel? defaultValue = null)
{
CustomModel? returnValue = defaultValue;
try
{
returnValue = Map(value, title);
}
finally
{
}
return returnValue;
}
uj5u.com熱心網友回復:
“只是”將 map 方法包裝在 try finally 中似乎是錯誤的,如果觸發了例外,則回傳默認值或者我在這里錯了 - 似乎我在濫用觸發例外的事實,或者是方法
在我看來,您可以使用try-catch陳述句,因為當您的程式遇到例外時您有計劃 B。所以,我完全有資格在try-catch這里使用陳述句,因為你可以回傳default值,這是計劃 b。
當錯誤不可恢復時,情況并非如此。例如,您無法從表中讀取資料,因為表是最近從資料庫中洗掉的。另一方面,如果可以恢復錯誤,那么您可以使用try-catch
更新:
如果Map函式沒有拋出例外,那么可以檢查null然后回傳默認值:
public static CustomModel? TryMapOrDefault(FieldType value, string title,
CustomModel? defaultValue = null)
{
CustomModel? returnValue = defaultValue;
returnValue = Map(value, title);
if (returnValue is null)
returnValue = defaultValue;
return returnValue;
}
如果要在拋出defaultValue時回傳Exception,則可以使用catch陳述句分配默認值。
讓我舉個例子:
public static CustomModel? TryMapOrDefault(FieldType value, string title,
CustomModel? defaultValue = null)
{
CustomModel? returnValue = defaultValue;
try
{
returnValue = Map(value, title);
}
catch (Exception ) {
returnValue = defaultValue;
}
return returnValue;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/518558.html
標籤:C#网设计模式
上一篇:交織兩個向量的更好方法-AVX2
