Както е посочено в документацията за този конструктор:
Вие просто извикахте различен конструктор, отколкото си мислехте във вашия случай.
Причината за това е, че C# позволява неявно преобразуване от целочисления литерал 0
към изброяващи типове (които са само интегрални типове отдолу) и това имплицитно преобразуване причинява (string, SqlDbType)
конструктор, за да бъде по-добро съвпадение за разделителна способност при претоварване, отколкото боксовата конверсия, необходима за преобразуване на int
към object
за (string, object)
конструктор.
Това никога няма да е проблем, когато подадете int
променлива , дори ако стойността на тази променлива е 0
(защото не е нулев литерал) или всеки друг израз, който има типа int
. Това също няма да се случи, ако изрично пуснете int
към object
както се вижда по-горе, защото тогава има само едно съответстващо претоварване.