Casting
-
@CSharperNew
So wie du das machst muss der Typ exakt stimmen.
Mit(int)xkannst du zwar z.B. einenlongin einenintkonvertieren. Und du kannst damit auch einen geboxtenintin einenintkonvertieren. Du kannst damit aber nicht einen geboxtenlongin einenintkonvertieren.Angenommen der Typ wäre long, und du weisst dass er immer long sein wird, dann kannst du schreiben
Object obj = plc.Read("MB3"); int zahl = (int)(long)obj; // 1) boxed long -> long 2) long -> intAnsonsten bietet sich an
Object obj = plc.Read("MB3"); int zahl = Convert.ToInt32(obj);
-
lol,
ich weiß gar keinen Typ
Nur dass es die Zahl 1 ist 
-
Dann nimm
Convert.ToInt32.
Oder guck nach (im Debugger oder mitobj.GetType().Name).
-
CSharper schrieb:
lol,
ich weiß gar keinen Typ
Nur dass es die Zahl 1 ist 
dann nimm PHP oder JS oder machs auf Papier

-
Hi,
ich bekomme ein Problem bei folgender Berechnung:public const double g = 9.809389; public double hoehe = 0.2; protected const double F = g * hoehe;"An object reference is required for the non-static field, method, or property"
Kann mir jemand sagen wieso das nicht geht? Klar wenn ich die hoehe auch als const deklariere funktioniert es. Aber letztenlich soll die hoehe später eingelesen werden. Es muss also irgendwie ohne const gehen...
Danke im Voraus
-
also der exakte Typ ist UInt16 . Ich frage mich warum ich den nicht in einen int casten kann. Schließlich ist int groesser als UInt16 .
-
Liegt wohl daran dass UInt16 eine Struktur ist.
-
NeulingCasting schrieb:
also der exakte Typ ist UInt16 . Ich frage mich warum ich den nicht in einen int casten kann. Schließlich ist int groesser als UInt16 .
Lies das hier
https://msdn.microsoft.com/en-us/library/yz2be5wk.aspxDie Konvertierung
object->intwird als "unboxing" bezeichnet.
Das funktioniert aber nur, wenn das object erzeugt wurde indem wirklich einint"geboxed" wurde und nicht ein anderer integraler Typ.
Wenn es einushort(aka.UInt16) war, dann funktioniert es nicht.
Wenn du dagegen erstmal mitobject->ushortdenushort"auspackst", dann kannst du den ausgepacktenushortdanach natürlich in einenintkonvertieren.
-
mach doch statt
protected const double F = g * hoehe;sowas
protected double F(){ return g * hoehe ;}
-
Oder wenn du keine Methode willst:
protected double F { get { return g * hoehe; } }Lässt sich dann verwenden wie ein readonly Feld.
