Som anges i dokumentationen för den konstruktören:
Du ringde helt enkelt en annan konstruktör än du trodde i ditt fall.
Anledningen till detta är att C# tillåter en implicit konvertering från heltalsliteralen 0
till enum-typer (som bara är integraltyper under), och denna implicita omvandling orsakar (string, SqlDbType)
konstruktor för att vara en bättre matchning för överbelastningsupplösning än boxningskonverteringen som krävs för att konvertera int
till object
för (string, object)
konstruktör.
Detta kommer aldrig att vara ett problem när du skickar en int
variabel , även om värdet på den variabeln är 0
(eftersom det inte är en bokstavlig noll), eller något annat uttryck som har typen int
. Det kommer inte heller att hända om du uttryckligen castar int
till object
som sett ovan, för då finns det bara en matchande överbelastning.