mars
2007
L’attribut DefaultValue est très pratique quand on ne veut pas « pourrir » les .designer et / ou quand on veut modifier la valeur par défaut d’une propriété, cependant, l’utilisation de cet attribut en VB est assez surprenante quand on veut affecter Nothing comme valeur par défaut.
En C#, on peut écrire :
{
}
public class Test2
{
[DefaultValue(null)]
public Test Test
[...]
}
Le problème en VB, c’est que le compilateur ne sait pas déduire à quelle surcharge du constructeur de DefaultValue on fait appel. Du coup, si on fait
<DefaultValue(Nothing)>
, on a l’erreur de compilation suivante :
« La résolution de surcharge a échoué, car aucun ‘New’ accessible n’est plus spécifique pour ces arguments :
‘Public Sub New(value As Boolean)': Pas plus spécifique.
‘Public Sub New(value As Byte)': Pas plus spécifique.
‘Public Sub New(value As Char)': Pas plus spécifique. »
La seule façon que j’ai trouvé pour contourner ce problème est de caster Nothing en Object :
<DefaultValue(DirectCast(Nothing, Object))>