解决了一个有点白痴的 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