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
Diese Frage hat hier bereits eine Antwort:
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 .