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!!


Anmelden zum Antworten