www.jammni.de

Logo - Kleiner Drache
Login
Username:

Passwort:

Daten merken
Auto-Login
Registrieren
 
Online
niemand
 
Forumsuche
Suche nach:

Logo - DracheC#-Forum

DerHulk

Gepostet:
06.02.2006 19:06

Casten/Konvertieren  
Hi, habe mal ne Verständnissfrage:

wodrin lieg der Unterschied wenn ich über
1)

int myValue = (int) otherValue;


oder über
2)

int myValue = System.Convert.toint32(otherValue);


ein objekt Konvertiere??(die erste Möglichkeit funkioniert bei mir eh nur im seltesten Fall)
Zum Seitenanfang    
 
Jammni

Gepostet:
07.02.2006 06:54

   
Im ersten Fall wandelst du explizit einen Typen um. Das kann unter Umständen mit Informationsverlust geschehen, sofern C# aber einen Weg sieht, den einen Datentypen in den anderen zu konvertieren, so wird das anstandslos ausgeführt.
Mit der Klasse Convert kannst du prinzipiell mehr und besser konvertieren. So ist es z.B. möglich, Strings in ints umzuwandeln, während der explizite Weg über int s = (int) "17" überhaupt nicht möglich ist. Das ist eben nicht einfach mit dem Abschneiden von ein paar Bytes etc. möglich.
Außerdem bekommst du mit Convert auch eine Fehlermeldung, falls du z.B. einen int in byte umwandelst, und dieser Wert nicht in byte reinpasst. Über den anderen Weg dürfte das C# ohne Probleme machen.
Bsp.:

int i = 100000;
byte j = (byte)i; // j = 64;
byte k = System.Convert.ToByte(j); // wirft eine Exception;
Zum Seitenanfang Homepage   ICQ    
 
DerHulk

Gepostet:
07.02.2006 19:04

   
Jo,vielen dank für die Antwort!Das erklärt einiges!
Was ich jedoch nicht verstehe ist das in manchen C# den man findet halt die Explizite Form findet,
wenn ich nun diesen Code Compiliere funktioniert das auch, nur wenn ich dann dieselbe
Konvertierung(also Datentypen sind gleich) in einer von mir geschriebene Anwendung dann bekomme ich
einen Fehler(entweder der gewünsche Konvertierungsvorgang ist nichtmöglich oder benutzen sie zum Überschreiben nicht aktivierte Syntax???) kannst du mir dazu noch was sagen?
Zum Seitenanfang    
 
Jammni

Gepostet:
07.02.2006 22:57

   
Also normalerweise kannst du über den Konvertierungsoperator (explizite Konvertierung) nur ein paar bestimmte Konvertierungen vornehmen. Also hauptsächlich Fest- und Gleitkommazahlen ineinander umwandeln und in jeweils kleinere / größere Zahlenbereiche umwandeln.
Wenn also eine dieser Konvertierungen in einer Anwendung funktioniert, dann funktioniert es auch in einer zweiten Anwendung. Ansonsten ist die Konvertierung allgemein nicht möglich und die bekommst die Fehlermeldung "Cannot convert type '<a>' to '<b>'". Mit der von dir angegebenen Fehlermeldung kann ich leider nichts anfangen - hab ich einfach noch nie gesehen...
Zum Seitenanfang Homepage   ICQ    
 
DerHulk

Gepostet:
11.02.2006 16:50

   
...also erstmal thx für deine antwort!
Ich finds erlich gesagt auch ziemlich komisch das das in dem einem Programm funtzt und in dem andren wieder nicht!
Aber System.Convert.toXYZ bekommt man es ja hin daher nicht so schlimm!
Zum Seitenanfang