c sharp

What is Null or Default Comparison of Generic Argument in C#

When working with generics in C#, it’s important to understand how null or default comparison works with generic arguments. In C#, null represents a reference to no object, while default represents the default value of a data type, this article will discuss how to perform null or default comparisons on generic arguments in C#, along with a code example.

Null Comparison of Generic Argument

When comparing generic arguments for null, we use the == operator that checks whether two operands are equal. When using the == operator to compare generic arguments, it is important to ensure that the argument type is a reference type. The == operator is used to compare references, here is an example of a null comparison of a generic argument in C#:

public static bool IsNull<T>(T arg) where T : class

{

  return arg == null;

}

The above code uses the == operator to check whether the argument is null or not and the where T : class constraint ensures that the argument type is a reference type, allowing us to use the == operator to compare references.

Default Comparison of Generic Argument

When comparing generic arguments for default, we use EqualityComparer<T>.Default.Equals method. The EqualityComparer<T>.Default property returns the default equality comparer for the type specified by the generic argument. The Equals method of the default equality comparer is used to compare two operands for equality, here is an example of a default comparison of a generic argument in C#:

public static bool IsDefault<T>(T arg)

{

  return EqualityComparer<T>.Default.Equals(arg, default);

The above code uses the EqualityComparer<T>.Default.Equals() function to check whether the argument is equal to the default value of its data type. The default keyword is used to represent the default value of a data type.

Example: Using null and default in C#

Here is a complete code example demonstrating both null and default comparison of generic argument in C#:

using System;

using System.Collections.Generic;

public class Program

{

   public static void Main()

   {

       string str = null;

       int i = default;

 

Console.WriteLine($"IsNull<string>: {IsNull<string>(str)}"); // True

Console.WriteLine($"IsDefault<int>: {IsDefault<int>(i)}"); // True

   }

 

   public static bool IsNull<T>(T arg) where T : class

   {

     return arg == null;

   }

   public static bool IsDefault<T>(T arg)

{

     return EqualityComparer<T>.Default.Equals(arg, default);

}

}

The above C# code defines a console application that contains two generic methods. The first method “IsNull” takes in a generic argument “arg” and returns a boolean value indicating whether “arg” is null or not, with a constraint that “T” must be a reference type.

The second method, “IsDefault” takes in a generic argument “arg” and returns a boolean value indicating whether “arg” is the default value for its type, with no constraints on “T”. The Main functions tests both methods with a null string and a default integer value, respectively:

Conclusion

When working with generics in C#, it is important to understand how null or default comparison works with generic arguments. For null comparison, we use the == operator to compare references, and for default comparison, we use the EqualityComparer<T>.Default.Equals method to compare values. You can write more efficient and effective code by understanding how to perform null or default comparisons on generic arguments.

About the author

Aaliyan Javaid

I am an electrical engineer and a technical blogger. My keen interest in embedded systems has led me to write and share my knowledge about them.