< Summary

Information
Class: Elsa.Extensions.TypeExtensions
Assembly: Elsa.Common
File(s): /home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Common/Extensions/TypeExtensions.cs
Line coverage
33%
Covered lines: 4
Uncovered lines: 8
Coverable lines: 12
Total lines: 57
Line coverage: 33.3%
Branch coverage
85%
Covered branches: 24
Total branches: 28
Branch coverage: 85.7%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
IsGenericType(...)100%22100%
IsNullableType(...)100%11100%
GetTypeOfNullable(...)100%11100%
IsCollectionType(...)0%2040%
MakeCollectionType(...)100%210%
GetCollectionElementType(...)100%210%
IsNumericType(...)100%2222100%

File(s)

/home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Common/Extensions/TypeExtensions.cs

#LineLine coverage
 1// ReSharper disable once CheckNamespace
 2namespace Elsa.Extensions;
 3
 4/// <summary>
 5/// Extends <see cref="Type"/> with additional methods.
 6/// </summary>
 7public static class TypeExtensions
 8{
 9    /// <summary>
 10    /// Returns true of the type is generic, false otherwise.
 11    /// </summary>
 32812    public static bool IsGenericType(this Type type, Type genericType) => type.IsGenericType && type.GetGenericTypeDefin
 13
 14    /// <summary>
 15    /// Returns true of the type is nullable, false otherwise.
 16    /// </summary>
 32817    public static bool IsNullableType(this Type type) => type.IsGenericType(typeof(Nullable<>));
 18
 19    /// <summary>
 20    /// Returns the wrapped type of the specified nullable type.
 21    /// </summary>
 1222    public static Type GetTypeOfNullable(this Type type) => type.GenericTypeArguments[0];
 23
 24    /// <summary>
 25    /// Returns true if the specified type is a collection type, false otherwise.
 26    /// </summary>
 27    public static bool IsCollectionType(this Type type)
 28    {
 029        if (!type.IsGenericType)
 030            return false;
 31
 032        var elementType = type.GenericTypeArguments[0];
 033        var collectionType = typeof(ICollection<>).MakeGenericType(elementType);
 034        var listType = typeof(IList<>).MakeGenericType(elementType);
 035        return collectionType.IsAssignableFrom(type) || listType.IsAssignableFrom(type);
 36    }
 37
 38    /// <summary>
 39    /// Constructs a collection type from the specified type.
 40    /// </summary>
 041    public static Type MakeCollectionType(this Type type) => typeof(ICollection<>).MakeGenericType(type);
 42
 43    /// <summary>
 44    /// Returns the element type of the specified collection type.
 45    /// </summary>
 046    public static Type GetCollectionElementType(this Type type) => type.GenericTypeArguments[0];
 47
 48    /// <summary>
 49    /// Determines whether the specified type is a numeric type.
 50    /// </summary>
 51    /// <param name="type">The type to check.</param>
 52    /// <returns>True if the specified type is numeric, otherwise false.</returns>
 53    public static bool IsNumericType(this Type type)
 54    {
 1855        return type.IsPrimitive || type == typeof(decimal) || type == typeof(float) || type == typeof(double) || type ==
 56    }
 57}