Si vous utilisez .NET 4.0 ou plus et que vous souhaitez une version programmatique qui ne soit pas une codification de règles définies en dehors du code vous pouvez créer un Expression
de le compiler et de l'exécuter à la volée.
La méthode d'extension suivante prend un Type
et obtenir la valeur retournée par default(T)
à travers le Default
méthode sur le Expression
classe :
public static T GetDefaultValue<T>()
{
// We want an Func<T> which returns the default.
// Create that expression here.
Expression<Func<T>> e = Expression.Lambda<Func<T>>(
// The default value, always get what the *code* tells us.
Expression.Default(typeof(T))
);
// Compile and return the value.
return e.Compile()();
}
public static object GetDefaultValue(this Type type)
{
// Validate parameters.
if (type == null) throw new ArgumentNullException("type");
// We want an Func<object> which returns the default.
// Create that expression here.
Expression<Func<object>> e = Expression.Lambda<Func<object>>(
// Have to convert to object.
Expression.Convert(
// The default value, always get what the *code* tells us.
Expression.Default(type), typeof(object)
)
);
// Compile and return the value.
return e.Compile()();
}
Vous devez également mettre en cache la valeur ci-dessus sur la base de l'adresse de l'utilisateur. Type
mais attention, si vous l'appelez pour un grand nombre d'utilisateurs, vous ne pouvez pas l'utiliser. Type
et ne l'utilisez pas en permanence, la mémoire consommée par le cache pourrait l'emporter sur les avantages.
0 votes
Cela devrait fonctionner : Nullable<T> a = new Nullable<T>().GetValueOrDefault() ;