Skip to main content

Migration Guides

Use this page when upgrading RA.Utilities.Core.Results between versions that introduce breaking changes.

v10.0.0 → v10.0.1​

Breaking Change: Extension methods moved to RA.Utilities.Core.Results.Extensions​

The Result and Result<T> types remain in RA.Utilities.Core.Results, but their extension methods moved from that namespace into the new RA.Utilities.Core.Results.Extensions namespace.

// ❌ v10.0.0
using RA.Utilities.Core.Results;

// ✅ v10.0.1
using RA.Utilities.Core.Results;
using RA.Utilities.Core.Results.Extensions;

Without the new using, calls such as .Map(...), .Bind(...), .OnSuccess(...), .OnFailure(...) or result.Match(...) on the untyped Result no longer compile — the compiler reports CS1061 ("no accessible extension method"), even though the package is referenced.

Breaking Change: ResultExtensions split into four classes​

The single ResultExtensions class was reorganized into one class per receiver type:

ClassExtendsMembers
ResultExtensionsResultOnSuccess, OnFailure, Bind, BindAsync, Match
TypedResultExtensionsResult<T>OnSuccess, OnFailure, Map, Bind, Bind<TOut>, MapAsync, BindAsync, BindAsync<TOut>
ResultAsyncExtensionsTask<Result>OnSuccessAsync, OnFailureAsync, BindAsync
TypedResultAsyncExtensionsTask<Result<T>>OnSuccessAsync, OnFailureAsync, MapAsync, BindAsync, BindAsync<TOut>

Extension-method call sites are unaffected — every method keeps its name and signature, and explicit generic type arguments still bind as before (e.g. result.MapAsync<int, string>(...)). Only code that references the ResultExtensions class by name (typeof(ResultExtensions), static invocation, reflection) must be updated to the matching class from the table.

All methods are now declared as C# 14 extension members inside extension(...) blocks on their target type; the generated methods are identical.

Verify the upgrade​

using RA.Utilities.Core.Results; // Result, Result<T>
using RA.Utilities.Core.Results.Extensions; // Map, Bind, OnSuccess, ...

Result<string> name = GetUser(42).Map(user => user.Name);

Full Changelog​

See the package release notes for a complete version history.