Typumwandlung
-
Hallo,
ich habe ein Beispiel Programm, bzw. den Code dazu, das in VB geschrieben ist, nun möchte ich einige Funktionalitäten auch in meinem C# Programm nutzen, aber ich werde aus zwei Zeilen nicht schlau. Ich habe mal keine Ahnung was diese Zeilen bedeuten.fstream = new FileStream(...) Dim contents(CType(fStream, FileMode.Open, FileAccess.Read) fstream.Read(contents, 0, CIn(fstream.Length)) return contens
die beiden Funktionen CType und CInt check ich mal gar nicht, das is wohl der grund warum ich diese auch nicht in C# "übersetzen" kann. Kann mir jemand helfen?
Gruß
-
Übersetzen kann ich dir deinen Code nicht, der ist unter Garantie falsch abgeschrieben (wie wärs mit Copy&Paste?)
Aber CType und CInt sind Typumwandlungsfunktionen oder besser -operatoren. CType(Wert, Typ) ist "wandle Wert nach Typ um", also in C# (Typ)Wert.
CInt(Wert) ist eine Abkürzung für CType(Wert, Integer).
-
Dim fStream As FileStream fStream = New FileStream(sFileName, FileMode.Open, FileAccess.Read) Dim contents(CType(fStream.Length, Integer) - 1) As Byte fStream.Read(contents, 0, CInt(fStream.Length)) fStream.Close() Return contents
Das ist der Code der in VB verwendet wird. Wie würde der Code in C# aussehen?
Ich kenne das "Gegenstück" in C# nicht. Hoffe mir kann jemand ein "Codebeispiel" dafür geben!! Danke schon mal im voraus
-
FileStream fStream; // war: Dim fStream As FileStream fStream = new FileStream(sFileName, FileMode.Open, FileAccess.Read); // fast identisch bis auf Groß/Kleinschreibung und ; am Ende byte[] contents = new byte[fStream.Length - 1]; // war: Dim contents(CType(fStream.Length, Integer) - 1) As Byte fStream.Read(contents, 0, (int)fStream.Length); // VB-Cast durch C-Cast ersetzt, Semikolon fStream.Close(); // Semikolon return contents; // Groß/Kleinschreibung, Semikolon
Wobei mir spontan auffällt dass der Array (auch in dem VB-Code) immer ein Byte zu kurz sein wird. Ausserdem sollte der FileReader durch using oder try/finally abgesichert werden.
-
Du must den Typ in den du umwandeln willst in Klammer davor schreiben
double d_val = 3.24; int int_val = (int) d_val;
-
ich denke das hab ich nu geblickt, leider habe ich noch ein Problem in folgendem Code:
public static byte[] ReturnFileByteArray(string FileName) { try { FileStream fStream; fStream = new FileStream(FileName, FileMode.Open, FileAccess.Read); byte[] contents = new byte[fStream.Length -1]; fStream.Read(contents, 0, (int)fStream.Length); fStream.Close(); // Semikolon return contents; } catch(Exception a) { ... }
ich hab das mal quasi so übernommen, bekomme aber noch ein Fehler, kann ich leider auch nicht zuordnen.
"ReturnFileByteArray(string): Nicht alle Codepfade geben einen Wert zurück."
kennt jmd diesen fehler??
-
Cindy schrieb:
"ReturnFileByteArray(string): Nicht alle Codepfade geben einen Wert zurück."
kennt jmd diesen fehler??Ich würde sagen, da fehlt eine return-Anweisung im catch()-Block.
-
Okay vielen vielen dank an euch alle!! habt mir sehr geholfen!!