594 Stimmen

Programmatische Entsprechung von default(Typ)

Ich verwende Reflexion, um eine Schleife durch eine Type Eigenschaften und setzen bestimmte Typen auf ihre Standardwerte. Jetzt könnte ich den Typ umschalten und die default(Type) explizit, aber ich würde es lieber in einer Zeile machen. Gibt es ein programmatisches Äquivalent zu default?

3voto

thomasgalliker Punkte 825

Geringfügige Anpassungen an @Rob Fonseca-Ensor's Lösung : Die folgende Erweiterungsmethode funktioniert auch unter .Net Standard, da ich GetRuntimeMethod anstelle von GetMethod verwende.

public static class TypeExtensions
{
    public static object GetDefault(this Type t)
    {
        var defaultValue = typeof(TypeExtensions)
            .GetRuntimeMethod(nameof(GetDefaultGeneric), new Type[] { })
            .MakeGenericMethod(t).Invoke(null, null);
        return defaultValue;
    }

    public static T GetDefaultGeneric<T>()
    {
        return default(T);
    }
}

...und den entsprechenden Einheitstest für diejenigen, denen die Qualität wichtig ist:

[Fact]
public void GetDefaultTest()
{
    // Arrange
    var type = typeof(DateTime);

    // Act
    var defaultValue = type.GetDefault();

    // Assert
    defaultValue.Should().Be(default(DateTime));
}

-1voto

Kaz-LA Punkte 228
 /// <summary>
    /// returns the default value of a specified type
    /// </summary>
    /// <param name="type"></param>
    public static object GetDefault(this Type type)
    {
        return type.IsValueType ? (!type.IsGenericType ? Activator.CreateInstance(type) : type.GenericTypeArguments[0].GetDefault() ) : null;
    }

-1voto

dancer42 Punkte 151

Das sollte funktionieren: Nullable<T> a = new Nullable<T>().GetValueOrDefault();

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X