none
With und ReDim aus VB in VC# RRS feed

  • Frage

  • Ich bin seit kurzem von VB 2005 EE zu VC# 2005 EE übergegangen da ja XNA Game Studio nur für VC# ist. Nun bräuchte ich einfach aus faulheit mal ein With da ich ein objekt in einem arrayeintrag hab dem ich nen haufen sachen zuweisen muss.

     

    z.b. in VB wars

     

    With Projectiles(0) { <-- weiß nicht obs die klammer war, ist auch egal

    .Speed = 5

    .TurnSpeed = 3

    .Damage = 10

    }

     

    geht sowas auch in C# ? Und ein ReDim für ein Array hab ich auch noch nicht gefunden, das brauch ich sogar dringender.

    Sonntag, 18. November 2007 20:43

Alle Antworten

  •  

    Hallöchen

     

    Der ReDim ist im C# recht einfach:

     

    Int32[] arr = new Int32[12]; //Deklaration

     

    arr = new Int32[3]; //ReDim

     

    Grüsschen

    FreakMan

    Donnerstag, 29. November 2007 13:10
  • naja soweit bin ich nun auch schon gekommen, ich hab leider vergessen hinzuschreiben dass ich das ReDim Preserve brauche, damit halt auch alles was schon drin is auch drin bleibt wenn man das Array halt vergrößert das hinten neue freie plätze entstehen.
    Donnerstag, 29. November 2007 13:55
  •  

    Hi

     

    Aha, so ist dass.

     

    Es ist so, eine äquivalente Variente gibt es in .NET nicht, aber versuche es doch mal so:

     

    Int32[] arr = new Int32[12]; //Deklaration

     

    int32[] tmp = new Int32[123]; //Neues Array mit der neuen Grösse

     

    Array.Copy(arr,tmp,arr.GetLength()); //Altes Arrary in das neue kopieren; letzter Parameter entsprichte der alten Länge!!

     

    arr = tmp; //Altes Array überschreiben!!

     

    Und fertig ist der ReDim Preserve!!

     

    Gruss

    FreakMan

    Freitag, 30. November 2007 09:41
  • ok danke, ich versuchs mal so.
    Freitag, 30. November 2007 10:46
  • Du kannst die Assembly Microsoft.VisualBasic.dll referenzieren und dann mit folgendem Konstrukt arbeiten:

    Quellcodeabschnitt

    using Microsoft.VisualBasic.CompilerServices;

     

    byte[] bytes = new byte[32];

    bytes = (byte[])Utils.CopyArray((Array)bytes, new byte[40]);

     

     

    Dann hast Du genau das, was ReDim macht.

     

    --

    MfG,

    Daniel Kuppitz

    Sonntag, 2. Dezember 2007 17:50