Jak je uvedeno v dokumentaci pro tento konstruktor:
Jednoduše jste volali jiný konstruktor, než jste si ve svém případě mysleli.
Důvodem je to, že C# umožňuje implicitní převod z celočíselného literálu 0
na výčt typů (což jsou pouze integrální typy níže) a tento implicitní převod způsobí (string, SqlDbType)
konstruktor, aby lépe odpovídal rozlišení přetížení než převod do boxu nutný k převodu int
na object
pro (string, object)
konstruktor.
To nikdy nebude problém, když předáte int
proměnná , i když je hodnota této proměnné 0
(protože to není nulový literál), nebo jakýkoli jiný výraz, který má typ int
. Také se to nestane, pokud explicitně přetypujete int
na object
jak je vidět výše, protože pak existuje pouze jedno odpovídající přetížení.