Warum ist es nicht zulässig, einem uint-Parameter in einem C # -Methodenargument einen ganzzahligen Wert zuzuweisen?

8

Wenn einem Parameter uint in einem C # -Methodenargument ein Standardwert zugewiesen wird, wie im ersten Codeblock unten gezeigt, erscheint die Meldung "Ein Wert vom Typ 'int' kann nicht als Standardparameter verwendet werden weil es keine Standardkonvertierungen gibt, um 'uint' einzugeben, während es bei der Zuweisung eines int zu einer uint-Variable im Methodenkörper gut ist.

Der Code kompiliert; Die Warnung wird mithilfe der roten, squiggly Unterstreichung in Visual Studio 2010 bereitgestellt.

%Vor%

Dies kann leicht gelöst werden, indem 365U anstelle von 365 verwendet wird, also:

%Vor%

Ich finde es wirklich schwierig, eine gute Erklärung dafür zu finden, warum es nicht zulässig ist,% int dem Parameter uint im Parameter zuzuordnen, wenn es an anderer Stelle gültig ist. Kann mir jemand mit dem "Glühbirnen" -Moment helfen, das ich zu finden versuche?

    
Jason 15.03.2012, 10:52
quelle

3 Antworten

1

Es kompiliert für mich, mit Compiler-Versionen von beiden 4.0.30319.1 und 4.0.30319.17379.

Wenn Sie eine ältere Version oder einen anderen Compiler (z. B. einen Mono-Compiler) verwenden, vermute ich, dass es sich um einen Fehler handelt.

EDIT: Wenn es gut kompiliert (und ich kann überhaupt keine Warnung vom Compiler provozieren) dann vermute ich es ist ein Plug-in, wie ReSharper. (Nicht dass ich es auch in ReSharper sehe ...)

Ich kann das in VS2010 nicht reproduzieren.

Ich würde vorschlagen, dass Sie tun den Code auf den ohne die Warnung aktualisieren, nur aus Gründen der Lesbarkeit - aber es ist immer noch gültig Code ohne die Änderung.

    
Jon Skeet 15.03.2012, 10:55
quelle
1

Rote Unterstreichung bedeutet normalerweise, dass Sie nicht kompilieren können. Der Code-Analyzer auf VS führt manchmal zu fehlerhaften Fehlermeldungen und Warnungen, die immer noch kompilieren. Das Neustarten von VS wird normalerweise von ihnen befreit.

    
Tsabo 15.03.2012 11:14
quelle
1

In Anbetracht der Tatsache, dass Sie eine Umwandlung vornehmen, also möglicherweise auch den Wert abschneiden, nehme ich an, dass Visual Studio nur Sie warnt , dass ein potenzielles Problem auftreten könnte lädt Sie ein, diese Besetzung explizit zu machen. Insbesondere wenn wir über Standardparameter sprechen, sollte der Standardwert eindeutig angegeben werden. Im Falle einer nicht-expliziten Umwandlung gibt es immer einen Raum für Zweifeln, wie der Cast-Wert aussehen würde.

    
Tigran 15.03.2012 11:03
quelle

Tags und Links