Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Abonnements

Quizz : DefaultValue

Un peu plus dur que le quizz précédent :

Je veux récupérer la valeur par défaut d'un type :

public static object GetDefault(this Type type)

{

    //Just do it!

}

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

Publié mercredi 24 septembre 2008 08:21 par Matthieu MEZIL

Classé sous : , ,

Commentaires

# re: Quizz : DefaultValue @ mercredi 24 septembre 2008 11:17

public static object GetDefault(this Type type)

{

   return default(type);

}

wizad

# re: Quizz : DefaultValue @ mercredi 24 septembre 2008 11:20

public static object GetDefault(this Type type) {

           if (!type.IsValueType) {

               return null;

           }

           else {

               return Activator.CreateInstance(type);

           }

       }

Charles C

# re: Quizz : DefaultValue @ mercredi 24 septembre 2008 11:26

@wizad:

Non. En effet, on ne peut pas passer dynamiquement le type avec default.

@Charles:

Bonne réponse. Perso, j'avais utilisé le IsNullable de la question suivante pour mon test.

Matthieu MEZIL

# re: Quizz : DefaultValue @ jeudi 25 septembre 2008 20:28

Si on peut utiliser les génériques:

public static class Default

<T>

{

   private static readonly bool _isReferenceType = !typeof(T).IsValueType;

   private static readonly T _default = default(T);

   public static bool IsDefaultValue(object value)

   {

       if (_isReferenceType)

           return (value == null);

       if (value == null)

           return false;

       return value.Equals(_default);

   }

   public static T DefaultValue

   {

       get

       {

           return _default;

       }

   }

}

smo

# re: Quizz : DefaultValue @ vendredi 26 septembre 2008 11:14

Pas d'accord avec toi Simon. Tu as oublié que typeof(int?).IsValueType est vrai. Donc ta méthode IsDeafultValue ne marche pas pour ce cas là.

Il faut donc tester avec :

(! typeof(T).IsValueType) || (typeof(T).IsGenericType &amp;&amp; typeof(T).GetGenericTypeDefinition() == typeof(Nullable&lt;&gt;));

Perso je l'aurais fait plus simplement :

public static bool IsDefaultValue(object value)

{

 if (_default == null)

   return value == null;

 return _default.Equals(value);

}

Matthieu MEZIL

# re: Quizz : DefaultValue @ vendredi 26 septembre 2008 20:35

En effet, un jour faudra qu'on m'explique comment une struct peut avoir null comme valeur par défaut... ça sent la bidouille interne à .NET. C'est pas pour rien qu'il est dans mscorlib! Du coup, il n'est pas dit que le test est globalement bon. J'imagine qu'il pourrait aussi y avoir d'autres types au comportement "spécial".

D'ailleurs tant qu'à changer la méthode, je pense qu'il vaudrait mieux faire

public static bool IsDefaultValue(object value)

{

 if (object.ReferenceEquals(_default, null))

   return object.ReferenceEquals(value, null);

 return _default.Equals(value);

}

Pour éviter les effets de bord sur la surcharge de ==.

smo

Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Merci par Blog de Jérémy Jeanson le 10-01-2019, 20:47

- Office 365: Script PowerShell pour auditer l’usage des Office Groups de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 11:02

- Office 365: Script PowerShell pour auditer l’usage de Microsoft Teams de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 10:39

- Office 365: Script PowerShell pour auditer l’usage de OneDrive for Business de votre tenant par Blog Technique de Romelard Fabrice le 04-25-2019, 15:13

- Office 365: Script PowerShell pour auditer l’usage de SharePoint Online de votre tenant par Blog Technique de Romelard Fabrice le 02-27-2019, 13:39

- Office 365: Script PowerShell pour auditer l’usage d’Exchange Online de votre tenant par Blog Technique de Romelard Fabrice le 02-25-2019, 15:07

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Stream Portal par Blog Technique de Romelard Fabrice le 02-21-2019, 17:56

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Video Portal par Blog Technique de Romelard Fabrice le 02-18-2019, 18:56

- Office 365: Script PowerShell pour extraire les Audit Log basés sur des filtres fournis par Blog Technique de Romelard Fabrice le 01-28-2019, 16:13

- SharePoint Online: Script PowerShell pour désactiver l’Option IRM des sites SPO non autorisés par Blog Technique de Romelard Fabrice le 12-14-2018, 13:01