Jak stwierdzono w dokumentacji dla tego konstruktora:
Po prostu wywołałeś innego konstruktora, niż myślałeś w swoim przypadku.
Powodem tego jest to, że C# pozwala na niejawne konwersja z literału całkowitego 0
do typów wyliczeniowych (które są po prostu typami całkowitymi poniżej), a ta niejawna konwersja powoduje, że (string, SqlDbType)
Konstruktor lepiej pasujący do rozwiązywania przeciążeń niż konwersja z boksami niezbędna do konwersji int
do object
dla (string, object)
konstruktor.
To nigdy nie będzie problemem, gdy zdasz int
zmienna , nawet jeśli wartość tej zmiennej to 0
(ponieważ nie jest to literał zerowy) lub jakiekolwiek inne wyrażenie typu int
. Nie stanie się to również, jeśli jawnie rzucisz int
do object
jak widać powyżej, ponieważ wtedy jest tylko jedno pasujące przeciążenie.