Comme indiqué dans la documentation pour ce constructeur :
Vous appeliez simplement un constructeur différent de celui que vous pensiez dans votre cas.
La raison en est que C # permet une implicite conversion à partir du littéral entier 0
en types enum (qui ne sont que des types intégraux en dessous), et cette conversion implicite provoque le (string, SqlDbType)
le constructeur correspond mieux à la résolution de surcharge que la conversion de boxe nécessaire pour convertir int
à object
pour le (string, object)
constructeur.
Cela ne sera jamais un problème lorsque vous passerez un int
variable , même si la valeur de cette variable est 0
(car ce n'est pas un littéral nul), ou toute autre expression de type int
. Cela ne se produira pas non plus si vous castez explicitement le int
à object
comme vu ci-dessus, car il n'y a alors qu'une seule surcharge correspondante.