Skip to content

fix: add MemberNotNullWhen to Result.IsSuccess/IsFailure - #2

Merged
andregoepel merged 1 commit into
mainfrom
fix/result-nullable-annotations
Jul 26, 2026
Merged

fix: add MemberNotNullWhen to Result.IsSuccess/IsFailure#2
andregoepel merged 1 commit into
mainfrom
fix/result-nullable-annotations

Conversation

@andregoepel

Copy link
Copy Markdown
Owner

Closes #1.

Adds `[MemberNotNullWhen(false, nameof(Error))]` to `IsSuccess` and `[MemberNotNullWhen(true, nameof(Error))]` to `IsFailure`, so consumers under `TreatWarningsAsErrors` can read `result.Error` inside either branch (`if (result.IsFailure) { ...Error... }` or `if (result.IsSuccess) {...} else { ...Error... }`) without a null-forgiving operator or CS8602.

Added two tests that only compile clean if the annotations are correct — no `!` and no explicit null-check on `Error`, relying purely on the attributes to satisfy nullable analysis. This repo's own `Directory.Build.props` already has `TreatWarningsAsErrors`, so a wrong annotation here would fail the build, not just a runtime assertion.

Purely additive (attribute-only, no shape change) — safe for the app-foundation PR #146 that already depends on 1.0.0.

Verification: `dotnet csharpier format .` clean, `dotnet build -c Release` 0 warnings/errors, `dotnet test` 6/6 passed, `dotnet list package --vulnerable --include-transitive` clean.

🤖 Generated with Claude Code

@andregoepel
andregoepel merged commit c8d739a into main Jul 26, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add [MemberNotNullWhen] to Result.IsSuccess/IsFailure

1 participant