Exceptions for invalid use - review and extensions #106
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Hey Amichai,
I reviewed your exception PR and would suggest the following changes:
IsError
is now a computed property. This removes 8 bits for the boolean value from the struct which leads to less execution time when copying by value. The sole indicator is now_errors
being null.ErrorsOrEmptyList
. This prevents allocating a new list on every property call where no errors are present.Value
property will now throw anInvalidOperationException
when errors are present. This behavior is now in line with the behavior of theErrors
orFirstError
property.InvalidOperationException
thrown in the implicit conversion methods to anArgumentException
- this is the usual exception that callers would expect when invalid parameters are passed in.ToErrorOr
extension method for error arrays - we did not have this one beforehand, only for lists.ErrorOr<TValue>
. The C# compiler will comprehend that a field is not null according to theMemberNotNullWhenAttribute
instances applied toIsError
.Feel free to cherry-pick these features as you see fit.