Re: [Git ] BeingValidated

作者: SuicideIwin () => print("Hello")   2023-06-27 09:45:21
解決了一個有點白癡的 issue
工具的用法是這樣
GetUserRequest input = ...; // accepted from client
GetUserResponse response = new();
bool isValid = input.StartValidate()
.Validate(i => i.UserId > 0,
i => response.AddError($"bad id!"),
e => response.AddError($"Exception: {e}"))
.IsValid();
簡單來說這是一個針對輸入驗證之類情況提供的 package
先執行輸入驗證方法
然後輸入驗證的方法可能會回傳 bool
如果 bool == false 則執行 onFail
如果方法執行過程中拋錯, 執行 onException
因為不一定總是想處理異常
所以 onFail 和 onException 都是 optional 的
public IBeingValidated<TInput, TOutput> Validate(
Func<TInput, bool> validation,
Action<TInput> onFail = null,
Action<TInput, Exception> onException = null);
然後工具的實作的處理, 其中一段是這樣
_inner.Validate(_ => validation.Invoke(element),
_ => onFail?.Invoke(element),
(_, e) => onException?.Invoke(element, e));
(_inner 是別的實作,真正的邏輯在裡面,在此不重要)
這裡原意是想在 onException 為 null (沒提供時)
就不做任何事, 讓異常繼續往外拋
但實際使用時發現 Exception 完全被忽略
然後才想到這行在 onException 為 null 時等於
(_, e) => null
所以直接被忽略掉
還好自己在測試的時候就發現了==
Lambda Function, Delegate 跟 Conditional Access 真的很方便,
可是使用上得更小心 orz
作者: twosheep0603 (兩羊)   2023-06-27 09:47:00
lambda好難
作者: MurasakiSion (紫咲シオン)   2023-06-27 09:47:00
大師

Links booklink

Contact Us: admin [ a t ] ucptt.com