Autor Beitrag
mmgg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 41



BeitragVerfasst: Mo 30.06.14 00:02 
Nabend,

dieses Beispiel ist aus einem Buch
openbook.galileocomp.../kap09.htm#Xxx474305
(10.2 Boxing Unboxing)

Während des Unboxings muss der Typ exakt übereinstimmen, denn es ist keine Rückkonvertierung in einen kompatiblen Typ möglich:
object o = 15;
short s = (short) o; // Schlägt fehl, o enthält keinen short-Wert

Das stimmt zwar, das schlägt fehl wenn ich es ausführen will, ich kann aber mit der Begründung nicht viel anfangen(o kein short wert).
Short ist ein Typ von -2hoch(x) bis +2hoch(x),

Ein paar Zeilen weiter oben wird dem object o ein int zugewiesen. Wenn also in dem Unboxing Beispiel nur:
o = 15;
short s = (short) o;
stehen würde, wär alles klar. Ist das vielleicht nur ein Flüchtigkeitsfehler vom Author? Ich bin der letzte der sich daran hochziehen würde, nur bin ich halt gerade dabei dieses Thema abzugraben und frage mich dann überseh ich was fehllt was usw.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mo 30.06.14 07:18 
Hallo,

das ist schon richtig so, es wird ja auch weiter unten in dem Buch noch ausgeführt. o enthält nach der Zuweisung einen in ein Objekt verpackten int und das ist nun mal kein short. Die Lösung wird weiter unten im Buch gezeigt: short t = (short)(int) o;

Viele Grüße
Christian

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
mmgg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 41



BeitragVerfasst: Mo 30.06.14 16:35 
So schreib ich das in meine Consolen-App, eine Variable vom Typ object bekommt 15. Damit ist festgelegt dass o vom Typ int ist?

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
class Programm
    {
        static void Main(string[] args)
        {
          object o = 15;
          short s = (short)o;
          Console.ReadLine(); 
        }
    }


Die Lösung hat ich auch gesehen, lösen lässt es sich aber auch so :
ausblenden C#-Quelltext
1:
2:
3:
short v = 123;
object o = v;         
short s = (short)o;


Moderiert von user profile iconChristian S.: Code- durch C#-Tags ersetzt
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mo 30.06.14 19:58 
user profile iconmmgg hat folgendes geschrieben Zum zitierten Posting springen:
Damit ist festgelegt dass o vom Typ int ist?
Ja, wenn es keine weiteren Angaben gibt, dann werden ganze Zahlen als int angsehen, also ist 15 ein int. Sieht man sogar schon im Editor, wenn man mal mit dem Mauszeiger über die Ziffern fährt, dann geht ein entsprechendes Hinweisfeld auf, was den Typ anzeigt.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
mmgg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 41



BeitragVerfasst: Di 08.07.14 03:27 
naja, jetzt wo dus sagst, man dankt