Sie verwenden dynamic
für den Eingang zu Convert.ToString
. Da eine Eingabe dynamic
ist, wird die Methodenbindung und Typprüfung auf die Laufzeit verschoben, sodass der Compiler nicht erkennt, dass der einzig mögliche Rückgabetyp string
ist. Der Compiler stoppt zu diesem Zeitpunkt grundsätzlich alle Bindungen und Typprüfungen.
Auch wenn Sie fiftySixInt = fiftySixDynamic.ToString()
genannt, die nicht eine Überlastung, die eine int
zurückkommt, würden Sie keine Warnung vom Compiler erhalten.
Eine Möglichkeit Kompilierung-Fehler für dynamische Verhalten erlauben und dennoch zu vermeiden, ist die Rückkehr zu werfen:
int fiftySixInt = (string)System.Convert.ToString(fiftySixDynamic);
Es sieht überflüssig, aber es weist den Compiler den Rückgabewert als string
für die Behandlung Bindung Zwecke. Die Methode ist zur Laufzeit immer noch gebunden. Wenn also der Rückgabetyp nicht eine Zeichenfolge ist, erhalten Sie eine Laufzeitausnahme, aber nachgeordnete Methoden werden zur Kompilierungszeit gebunden.
Meine Empfehlung ist das post als Bug .. ich bin nicht wirklich sicher, an welchem Ort es von der Hand gehen würde. –
@ChrisMarisic Dies ist genau das, was es tun soll. Wenn es * nicht * kompiliert * wäre, wäre das ein Fehler. – Servy
Dies hebt eine Schwäche in C# hervor - es ist dem Programmierer nicht klar, welche Ausdrücke die Typprüfung ausgeschaltet haben. Die Sprachdesigner haben es besser mit unsicheren {} – buffjape