YAGuard 2.0.0

dotnet add package YAGuard --version 2.0.0                
NuGet\Install-Package YAGuard -Version 2.0.0                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="YAGuard" Version="2.0.0" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add YAGuard --version 2.0.0                
#r "nuget: YAGuard, 2.0.0"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install YAGuard as a Cake Addin
#addin nuget:?package=YAGuard&version=2.0.0

// Install YAGuard as a Cake Tool
#tool nuget:?package=YAGuard&version=2.0.0                

YAGuard

Yet Another Guard argument validation package. Provide the argument for validation, its name is automatically resolved in the resulting exception. Usage:

public void MyFunc(string myArg)
{
    Guard.AgainstNull(myArg);
    // or
    Guard.AgainstNull( () => myArg );
    // or
    Guard.AgainstNull(myArg, "myArg");
    // or
    Guard.AgainstNull(myArg, nameof(myArg));
}

In case myArg is null, this will throw an ArgumentNullException with the correct argument name.

You can also use value of the argument immediately like this:

public void MyFunc(string myArg)
{
    string validatedArg1 = Guard.AgainstNull(myArg);
    // or
    string validatedArg2 = Guard.AgainstNull( () => myArg );
    // or
    string validatedArg3 = Guard.AgainstNull(myArg, "myArg");
    // or
    string validatedArg4 = Guard.AgainstNull(myArg, nameof(myArg));
}

Examples

To validate method arguments:

  public void MyMethod(string myArg)
  {
    Guard.AgainstNull(myArg);              // Will throw ArgumentNullException when myArg is null.
    Guard.AgainstNull(() => myArg);        // Will throw ArgumentNullException when myArg is null.
    Guard.AgainstNullOrEmptyString(myArg); // Will throw ArgumentException when myArg is null or empty.
    Guard.AgainstLongString(myArg, 10);    // Will throw ArgumentException when myArg is longer then 10 characters.
    
    MyProperty = myArg;
    ...
  }

Use intellisense for a full list of supported validation methods.

Limitations

All styles detect invalid parameter values correctly, but there are differences in the efficiency in resolving parameter names. The expression style : Guard.AgainstNull(() => myArg); reliably resolves the name of the parameter in most scenarios.

The simple style: Guard.AgainstNull(myArg) works correctly when there's a single method parameter, or when the type of the guarded parameter is unique in the argument list.

In case you are validating anything other than a method parameter, use the expression style, as the simple style uses the method declaration to resolve the parameter name. In case there are two parameters of the same type, the parameter name in the exception thrown will contain both of their names. In such cases, use the expression style.

Release History

v2.0.0

Removed support for dotnet core 2.1 because of vulnerabilities there Added support for dotner 6, dotnet 7, dotnet 8, .Net Framework 4.8.1

v1.1.4

Added support for validating collection argument items against a set of accepted values. Guard.AgainstUnsupportedCollectionItems(fruits, new string[] { "apples", "pears"});

v1.1.x

Added support for the expression style: Guard.Against...( () => myArg ); Added best effort parameter name resolution to the plain style validation.

v1.0.4

Retired the Assign class, changed Guard methods to return the argument value.

v1.0.x

Added support for the style: Guard.Against...(myArg); which automatically resolves the name of the argument.

Removed support for the style: Guard.Against...(new { myArg });

v0.0.x

Implemented two styles:

Guard.Against...(myArg, argName);
Guard.Against...(new { myArg });

the second one to help avoid typing the name of the argument. But it didn't really help when compared to nameof(myArg).

Product Compatible and additional computed target framework versions.
.NET net5.0 is compatible.  net5.0-windows was computed.  net6.0 is compatible.  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 is compatible.  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 is compatible.  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. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 is compatible. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net452 is compatible.  net46 was computed.  net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 is compatible. 
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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • .NETCoreApp 3.1

    • No dependencies.
  • .NETFramework 4.5.2

    • No dependencies.
  • .NETFramework 4.8.1

    • No dependencies.
  • .NETStandard 2.0

    • No dependencies.
  • net5.0

    • No dependencies.
  • net6.0

    • No dependencies.
  • net7.0

    • No dependencies.
  • net8.0

    • No dependencies.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on YAGuard:

Package Downloads
B.MaskedTimers

A timer with a set of intervals to mask when the timer can fire. The timer will only fire within the specified intervals.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
2.0.0 216 6/24/2024
1.1.4 3,554 10/10/2023
1.1.3 4,643 3/5/2022
1.1.2 2,077 1/2/2021
1.1.1 328 12/29/2020
1.1.0 406 12/28/2020
1.0.4 341 12/27/2020
1.0.3 367 11/28/2020
1.0.2 364 11/28/2020
1.0.1 412 11/28/2020
1.0.0 432 11/28/2020
0.0.5 484 3/5/2020
0.0.4 433 2/5/2020
0.0.3 493 2/3/2020
0.0.2 555 2/2/2020
0.0.1 589 2/2/2020
0.0.0 461 2/2/2020

Added support for validating collection argument items against a set of accepted values.