Feedback

Prüfen, ob ein Typ (null)-Werte annehmen kann

Sprache: C#

Prüft, ob ein Typ auch (null)-Werte annehmen kann, wie z.B. 'bool?' oder 'object'
using System;

namespace MarcelJKloubert
{
    public static Tools
    {
        /// <summary>
        /// Prüft, ob ein Typ (null)-Werte annehmen kann oder nicht
        /// </summary>
        /// <param name="type">Typ, der geprüft werden soll</param>
        /// <returns>Kann (null)-Werte annehmen (true) oder nicht (false)</returns>
        public static bool IsNullable(Type type)
        {
            if (null == type)
            {
                throw new ArgumentNullException("type");
            }

            if (!type.IsValueType)
            {
                // kein Wertetyp, daher kann der Typ (null)-Werte annehmen
                return true;
            }

            // Wenn Nullable.GetUnderlyingType() einen übergeordneten Typ ermitteln kann,
            // bedeutet dies, dass dies ein Wertetyp ist, der (null)-Werte annehmen kann,
            // z.B. bool?
            return Nullable.GetUnderlyingType(type) is Type;
        }
    }
}
using System;

namespace MarcelJKloubert
{
    public static Tools
    {
        /// <summary>
        /// Prüft, ob ein Typ (null)-Werte annehmen kann oder nicht
        /// </summary>
        /// <param name="type">Typ, der geprüft werden soll</param>
        /// <returns>Kann (null)-Werte annehmen (true) oder nicht (false)</returns>
        public static bool IsNullable(Type type)
        {
            if (null == type)
            {
                throw new ArgumentNullException("type");
            }

            if (!type.IsValueType)
            {
                // kein Wertetyp, daher kann der Typ (null)-Werte annehmen
                return true;
            }

            // Wenn Nullable.GetUnderlyingType() einen übergeordneten Typ ermitteln kann,
            // bedeutet dies, dass dies ein Wertetyp ist, der (null)-Werte annehmen kann,
            // z.B. bool?
            return Nullable.GetUnderlyingType(type) is Type;
        }
    }
}

3 Kommentare

  1. Ein bissel abgewandelt:
    [code]public static class Tools
    {
    ///

    /// Prüft, ob ein Typ (null)-Werte annehmen kann oder nicht
    ///

    /// Typ, der geprüft werden soll
    /// Kann (null)-Werte annehmen (true) oder nicht (false)
    public static bool IsNullable(this object type)
    {

    Type realType = type.GetType();
    if (null == type)
    {
    throw new ArgumentNullException(„type“);
    }

    if (!realType.IsValueType)
    {
    // kein Wertetyp, daher kann der Typ (null)-Werte annehmen
    return true;
    }

    // Wenn Nullable.GetUnderlyingType() einen übergeordneten Typ ermitteln kann,
    // bedeutet dies, dass dies ein Wertetyp ist, der (null)-Werte annehmen kann,
    // z.B. bool?
    return Nullable.GetUnderlyingType(realType) is Type;
    }
    }[/code]

    Und shcon hat man ne geile Extension.
    Ich find das snippet gut 😀

  2. ja, das finde ich sogar noch ne VIEL bessere Lösung! 🙂 dann kann man das „if (null == type)“ ja weglassen…