Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Warum behandelt der Name/Wert-Konstruktor von SqlParameter 0 als null?

Wie in der Dokumentation angegeben für diesen Konstruktor:

Sie haben einfach einen anderen Konstruktor aufgerufen, als Sie in Ihrem Fall dachten.

Der Grund dafür ist, dass C# ein implizites erlaubt Konvertierung aus dem Integer-Literal 0 in Aufzählungstypen (die darunter nur ganzzahlige Typen sind), und diese implizite Konvertierung verursacht den (string, SqlDbType) Konstruktor besser für die Überladungsauflösung geeignet als die Boxing-Konvertierung, die zum Konvertieren von int erforderlich ist zu object für den (string, object) Konstruktor.

Dies wird niemals ein Problem sein, wenn Sie einen int übergeben Variable , auch wenn der Wert dieser Variablen 0 ist (weil es kein Nullliteral ist) oder irgendein anderer Ausdruck, der den Typ int hat . Es wird auch nicht passieren, wenn Sie int explizit umwandeln zu object wie oben gesehen, weil es dann nur eine passende Überladung gibt.