MBW.Generators.NonTryMethods
0.3.0
dotnet add package MBW.Generators.NonTryMethods --version 0.3.0
NuGet\Install-Package MBW.Generators.NonTryMethods -Version 0.3.0
<PackageReference Include="MBW.Generators.NonTryMethods" Version="0.3.0" />
<PackageVersion Include="MBW.Generators.NonTryMethods" Version="0.3.0" />
<PackageReference Include="MBW.Generators.NonTryMethods" />
paket add MBW.Generators.NonTryMethods --version 0.3.0
#r "nuget: MBW.Generators.NonTryMethods, 0.3.0"
#:package MBW.Generators.NonTryMethods@0.3.0
#addin nuget:?package=MBW.Generators.NonTryMethods&version=0.3.0
#tool nuget:?package=MBW.Generators.NonTryMethods&version=0.3.0
MBW.Generators.NonTryMethods
About
Creates non-try wrappers for methods that follow the TryX pattern. The generator scans for matching methods and emits counterparts that return the out value or throw when the original method fails. This helps turn low level APIs that expose bool Try... into friendlier ones.
Picture a repository with a TryFind method that returns a bool and an out value. Consumers often just want the value and are fine with an exception when it is missing.
Quick Start
- Install the
MBW.Generators.NonTryMethodspackage. - Add
[GenerateNonTryMethod](and optionally[GenerateNonTryOptions]) at the assembly or type level. - By default, methods matching the regex
^[Tt]ry(.*)with aboolreturn and anoutparameter are wrapped, as are async methods returningTask<(bool, T)>orValueTask<(bool, T)>. Generated methods return the success value or throwInvalidOperationException. Generated members are emitted into partial types; setMethodsGenerationStrategy.Extensionsto produce extension methods instead.
The package includes both the attributes and the source generator.
Example
using MBW.Generators.NonTryMethods.Attributes;
[GenerateNonTryMethod(typeof(InvalidOperationException))]
[GenerateNonTryOptions(returnGenerationStrategy: ReturnGenerationStrategy.TrueMeansNotNull)]
public partial class Repository
{
public bool TryFind(int id, out string? value)
{
value = id == 1 ? "one" : null;
return value is not null;
}
}
Generates
// <auto-generated/>
#nullable enable
using System;
partial class Repository
{
public string Find(int id)
{
if (TryFind(id, out var value))
return value;
throw new InvalidOperationException();
}
}
Features
- Flexible targeting of try-pattern methods via attributes and regexes.
- Customize the exception thrown when a method fails.
- Supports synchronous and asynchronous wrappers.
- Uses incremental generators for performance.
- Emits diagnostics to guide correct usage, including invalid regex patterns, duplicate signatures, and collisions with existing members.
- Generated methods include XML documentation that references the source method.
- Generates partial members, extensions, and interface implementations with default bodies.
- Preserves visibility, parameter names, modifiers (
ref,in,out,params) and default values from the source methods. - Extension methods respect value-type receivers by adding
reforinwhere required.
Attributes
- GenerateNonTryMethodAttribute – apply to an assembly, class, interface or struct. Selects which try methods are wrapped.
exceptionType– exception thrown when the wrapped method returnsfalse(defaultInvalidOperationException).methodNamePattern– regex used to identify methods to wrap (default^[Tt]ry(.*)).
- GenerateNonTryOptionsAttribute – apply to an assembly, class, interface or struct to control generation.
AsyncCandidateStrategy– include or exclude async try methods:None– ignore async methods.TupleBooleanAndValue– wrap methods returningTask<(bool, T)>orValueTask<(bool, T)>.
ReturnGenerationStrategy– governs nullability of the generated method's return type:Verbatim– copy theoutparameter's nullability.TrueMeansNotNull– successful calls are assumed to return non-null.
MethodsGenerationStrategy– where to place generated methods:Auto– emit into partial types (default).PartialType– emit into partial types (requires partial declaration).Extensions– emit extension methods.
GenerateNonTryMethodAttribute may be used multiple times. GenerateNonTryOptionsAttribute is single-use. Neither attribute is inherited.
More information
This project is provided as-is without support. Additional examples are available in the tests.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.