Come indicato nella documentazione per quel costruttore:
Stavi semplicemente chiamando un costruttore diverso da quello che pensavi nel tuo caso.
Il motivo è che C# consente un implicito conversione dal valore letterale intero 0
per enumerare i tipi (che sono solo tipi integrali sottostanti), e questa conversione implicita provoca il (string, SqlDbType)
costruttore per essere una corrispondenza migliore per la risoluzione dell'overload rispetto alla conversione boxing necessaria per convertire int
a object
per il (string, object)
costruttore.
Questo non sarà mai un problema quando passi un int
variabile , anche se il valore di quella variabile è 0
(perché non è un valore letterale zero) o qualsiasi altra espressione che abbia il tipo int
. Inoltre, non accadrà se trasmetti esplicitamente int
a object
come visto sopra, perché allora c'è solo un sovraccarico corrispondente.