Auflösung des Compiler-Werttyps und fest codierte Ganzzahlwerte „0“.C#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Auflösung des Compiler-Werttyps und fest codierte Ganzzahlwerte „0“.

Post by Anonymous »

Zunächst ein paar Hintergrundinformationen. Lesen Sie die hier veröffentlichte Frage und akzeptierte Antwort für ein bestimmtes Szenario für meine Frage. Ich bin mir nicht sicher, ob es andere, ähnliche Fälle gibt, aber dies ist der einzige Fall, der mir bekannt ist.

Die obige „Eigenart“ ist mir bewusst von seit langem. Ich habe das ganze Ausmaß der Ursache erst vor kurzem verstanden.

Microsofts Dokumentation zur SqlParameter-Klasse wirft etwas mehr Licht auf die Situation.< /p>


Wenn Sie ein Objekt im Wertparameter angeben, wird der SqlDbType von Microsoft abgeleitet .NET Framework-Typ des Objekts.

Seien Sie vorsichtig, wenn Sie diese Überladung des SqlParameter-Konstruktors
verwenden, um ganzzahlige Parameterwerte anzugeben. Da diese Überladung einen
Wert vom Typ Object annimmt, müssen Sie den Integralwert in einen Object
-Typ konvertieren, wenn der Wert Null ist Das folgende C#-Beispiel zeigt.

Code: Select all

Parameter = new SqlParameter("@pname", Convert.ToInt32(0));
Wenn Sie
diese Konvertierung nicht durchführen, geht der Compiler davon aus, dass Sie
versuchen, den SqlParameter aufzurufen ( string, SqlDbType) Konstruktorüberladung.



(emph. hinzugefügt)

Meine Frage ist, warum der Compiler davon ausgeht, wenn Sie angeben eine fest codierte „0“ (und nur der Wert „0“), dass Sie versuchen, einen Aufzählungstyp und nicht einen Ganzzahltyp anzugeben? In diesem Fall wird davon ausgegangen, dass Sie den SqlDbType-Wert anstelle des Werts 0 deklarieren.

Dies ist nicht intuitiv und, was die Sache noch schlimmer macht, Der Fehler ist inkonsistent. Ich habe alte Anwendungen geschrieben, die seit Jahren gespeicherte Prozeduren aufrufen. Ich nehme eine Änderung an der Anwendung vor (die oft nicht einmal mit meinen SQL Server-Klassen verknüpft ist), veröffentliche ein Update und dieses Problem führt plötzlich zum Ausfall der Anwendung.

Warum wird der Compiler durch den Wert 0 verwirrt, wenn ein Objekt mit mehreren Methodensignaturen zwei ähnliche Signaturen enthält, wobei ein Parameter ein Objekt/eine Ganzzahl ist und der andere eine Aufzählung akzeptiert?

As Ich habe bereits erwähnt, dass ich dies bei keinem anderen Konstruktor oder einer anderen Methode einer anderen Klasse als Problem gesehen habe. Gilt dies nur für die Klasse SqlParameter oder handelt es sich um einen in C#/.Net geerbten Fehler?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post