C'est vraiment estompe moi aujourd'hui. Je suis sûr que ce n'est pas si dur, mais j'ai un Système.De la réflexion.PropertyInfo objet. Je veux définissez sa valeur sur la base du résultat d'une recherche de base de données (pensez à l'ORM, le mappage d'une colonne à une propriété).
Mon problème est que si la DB, la valeur de retour est DBNull, je veux juste pour définir la valeur de la propriété à sa valeur par défaut, le même que celui d'un appel:
value = default(T); // where T is the type of the property.
Toutefois, la valeur par défaut() la méthode ne compile pas si vous lui donnez un Type, qui est ce que j'ai:
object myObj = ???; // doesn't really matter. some arbitrary class.
PropertyInfo myPropInf = ???; // the reflection data for a property on the myObj object.
myPropInf.SetValue(myObj, default(myPropInf.PropertyType), null);
Le ci-dessus ne compile pas. par défaut(Type) n'est pas valide. J'ai aussi pensé faire:
object myObj = ???;
PropertyInfo myPropInf = ???;
myPropInf.SetValue(myObj, Activator.CreateInstance(myPropInf.PropertyType), null);
Toutefois, si le Type est une chaîne, qui permettrait d'affecter la valeur "new String()", mais je veux vraiment "nul", ce qui est "par défaut(string)" serait de retour.
Donc ce qui me manque ici? Je suppose que vraiment hacky moyen serait de créer une nouvelle instance de myObj du Type et de la copie de la propriété, mais il semble tout simplement stupide...
object myObj = ???;
PropertyInfo myPropInf = ???;
var blank = Activator.CreateInstance(myObj.GetType());
object defaultValue = myPropInf.GetValue(blank, null);
myPropInf.SetValue(myObj, defaultValue, null);
Je préfère ne pas perdre la mémoire pour faire une toute nouvelle instance, juste pour obtenir la valeur par défaut pour la propriété si. Semble très inutile.
Des idées?