Werfen Sie meine 2c - es scheint, dass eine konzeptionelle Unterscheidung nützlich sein könnte. Nicht dass ich ein Experte wäre ..:
Das Casting ändert den repräsentativen Typ. "32" und 32L und 32.0f scheinen also vernünftig zu sein. c # unterstützt die "32" nicht automatisch, die meisten dynamischen Sprachen jedoch. Also werde ich die (lange) "32" oder (String) 32L verwenden. Wenn ich kann. Ich habe auch eine andere Regel - Casting sollte rund trippbar sein.
Das Konvertieren muss nicht rund sein und kann einfach ein völlig neues Objekt erstellen.
Der graue Bereich ist beispielsweise die Zeichenfolge "32xx". Es kann der Fall eintreten, dass beim Wirken 32 L werden (die Zahl wurde analysiert, bis sie nicht mehr möglich war). Perl hat das benutzt. Aber dann verstößt dies gegen meine Hin- und Rückfluganforderung. Gleiches gilt für 32.5f bis 32L. Fast alle Sprachen, einschließlich sehr statisch typisierter, erlauben dies, und es verstößt auch gegen die runde Auslöseregel. Wenn Sie zulassen, dass "32" umgewandelt wird, wissen Sie beim Kompilieren nicht, ob es sich möglicherweise um "32xxx" handelt.
Eine weitere Unterscheidung, die getroffen werden kann, besteht darin, Casting nur für "IsA" und nicht für "makeLookLikeA" zu verwenden. Wenn Sie also wissen, dass eine Zeichenfolge aus einer Datenbank stammt, aber tatsächlich ein Int im inoffiziellen Schema ist, können Sie eine Besetzung verwenden (obwohl c # in diesem Fall möchte, dass Sie Convert trotzdem verwenden). Das gleiche würde für einen Wagen gelten. Aber nicht, wenn Sie nur den Cast verwenden, um den Float abzuschneiden. Diese Unterscheidung gilt auch für DownCasting und UpCasting - das Objekt war immer 'IsA', aber der Typ wurde möglicherweise für eine Liste verallgemeinert.
Convert.To()
. Daher dient meine Frage als Ergänzung zu Ihrer Frage.