c# - speichern - Standardwert eines Typs zur Laufzeit




wpf settings (4)

Es gibt wirklich nur zwei Möglichkeiten: null für Referenztypen und new myType() für new myType() was 0 für int, float usw. entspricht). Sie müssen also nur zwei Fälle berücksichtigen:

object GetDefaultValue(Type t)
{
    if (t.IsValueType)
        return Activator.CreateInstance(t);

    return null;
}

(Da Werttypen immer einen Standardkonstruktor haben, wird dieser Aufruf an Activator.CreateInstance niemals fehlschlagen).

https://code.i-harness.com

Für jeden gegebenen Typ möchte ich seinen Standardwert wissen.

In C # gibt es ein Schlüsselwort namens default, um dies zu tun

object obj = default(Decimal);

aber ich habe eine Instanz von Type (myType genannt) und wenn ich das sage,

object obj = default(myType);

es funktioniert nicht

Gibt es eine gute Möglichkeit, dies zu tun? Ich weiß, dass ein großer Schalterblock funktionieren wird, aber das ist keine gute Wahl.


Hier ist eine Funktion, die den Standardwert für einen Nullable-Typ zurückgibt (mit anderen Worten, es gibt 0 für Decimal und Decimal? ):

public static object DefaultValue(Type maybeNullable)
{
    Type underlying = Nullable.GetUnderlyingType(maybeNullable);
    if (underlying != null)
        return Activator.CreateInstance(underlying);
    return Activator.CreateInstance(maybeNullable);
}

Sie könnten es auch als Erweiterungsmethode zu System.Type hinzufügen:

public static class TypeExtensions
{
    public static object GetDefaultValue(this Type t)
    {
        if (t.IsValueType && Nullable.GetUnderlyingType(t) == null)
            return Activator.CreateInstance(t);
        else
            return null;
    }
}

Was meinst du mit "Standardwert"? Alle Referenztypen ("Klasse") haben als Standardwert null, während alle Werttypen ihre Standardwerte gemäß dieser Tabelle haben .





default