[英]Break out of parent function?
public static void CacheUncachedMessageIDs(List<int> messageIDs)
{
var uncachedRecordIDs = LocalCacheController.GetUncachedRecordIDs<PrivateMessage>(messageIDs);
if (!uncachedRecordIDs.Any()) return;
using (var db = new DBContext())
{
.....
}
}
在整個項目中定期重復上述方法(除非傳入了不同的泛型)。 我希望避免重復使用if (!uncachedRecordIDs.Any()) return;
線。
簡而言之,是否可以使LocalCacheController.GetUncachedRecordIDs
返回CacheUncachedMessageIDs
方法?
這將確保除非需要,否則不會創建新的數據上下文(避免意外忘記在父方法中添加返回行)。
嵌套方法不可能從父方法返回。 您可以在GetUncachedRecordIDs
內執行一些未處理的Exception
來GetUncachedRecordIDs
此問題,但不應這樣做,因此會造成混亂。 而且,它非常慢。
另一個不建議使用的機制是使用goto
魔術。 這也會引起混亂,因為goto
允許程序執行流程中發生意外行為。
最好的選擇是返回帶有簡單bool HasUncachedRecordIDs
字段的Result
對象,然后進行檢查。 如果通過,則返回。 此解決方案解決了調用方法的問題,這種情況下為Any()
。
var uncachedRecordIDsResult = LocalCacheController.GetUncachedRecordIDs<PrivateMessage>(messageIDs);
if(uncachedRecordIDsResult.HasUncachedRecordIDs) return;
我之所以缺乏該語言的功能,是因為基本上在任何函數中調用GetUncachedRecordIDs
都會意外終止該父函數,而不會發出警告。 而且,它將緊密地纏繞兩個功能,並且最佳編程實踐涉及類和方法的松散耦合。
您可以將Action
傳遞給GetUncachedRecordIDs
方法,該方法僅在需要時才調用。 概圖:
// LocalCacheController
void GetUncachedRecordIDs<T>(List<int> messageIDs, Action<List<int>> action)
{
// ...
if (!cached) {
action(recordIds);
}
}
// ...
public static void CacheUncachedMessageIDs(List<int> messageIDs)
{
LocalCacheController.GetUncachedRecordIDs<PrivateMessage>(messageIDs, uncachedRecordIDs => {
using (var db = new DBContext())
{
// ...
}
});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.