Autor Beitrag
PinkoPalino
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mo 16.07.07 14:13 
Hi!
Ich habe folgenden Code:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
    public class PointsInfo
    {    
      public double L, A, B;
      public string description;
    }

    public unsafe class clPointList
    {
      public int subPoints;
      PointsInfo* Points;
    }


Dann habe cih so ein Element erstellt:
ausblenden C#-Quelltext
1:
    unsafe clPointList *PointsToDraw = null;					

Wie kann ich jetzt z.B. die Variable PointsToDraw vergrößern, bzw. neu erstellen.
Ich habe es bereits so versucht:
ausblenden C#-Quelltext
1:
2:
PointsToDraw = stackalloc clPointList[10];
PointsToDraw[0].Points = stackalloc PointsInfo[20];


Es kommt aber immer die Fehlermeldung:
Invalid expression term 'stackalloc'

Ich habe VS 2003.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mo 16.07.07 15:28 
Wieso arbeitest Du mit Pointern? :gruebel: Ohne diese wäre ein solche Fehler sehr unwahrscheinlich.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
PinkoPalino Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mo 16.07.07 21:27 
Wie wäre dies ohne Pointer möglich?
Ich bin noch nicht so bewandert in C#.
Ich programmiere meistens in C++, aber ich muss hier einen C# Code erweitern.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mo 16.07.07 21:51 
Wenn ich das richtig sehe, sollte Dein Code mit C# Arrays so aussehen (Arrays bitte in der Doku nachlesen):

Warnung: Ich prüf's nicht im VS, Kleinigkeiten also bitte selber korrigieren. ;-)

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
    public class PointsInfo
    {    
      public double L, A, B;
      public string description;
    }

    public class PointList //Präfixe wie "cl" eher unüblich in C#
    {
      public int subPoints;
      PointsInfo[] Points; //Array deklarieren
    }


Und erstellen so:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
PointList[] pointsToDraw = new pointsToDraw[10]; //Array mit zehn Einträgen erstellen.

pointsToDraw[0] = new PointList(); // für jeden Eintrag im Array machen!
pointsToDraw[0].Points = new PointsInfo[20];

pointsToDraw[0].Points[0] = new PointsInfo(); //für jeden Eintrag machen!



Und nun meine Frage? Spricht etwas gegen den Einsatz von VS 2005 und .NET 2.0? Damit könnte man das ganze recht schön lösen:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
    public class PointsInfo
    {    
      public double L, A, B;
      public string description;
    }


    public class PointList //Präfixe wie "cl" eher unüblich in C#
    {
        private List<PointsInfo> points;

        public PoinList() //Konstruktor
        {
             points = new List<PointsInfo>;
        }

        public List<PointsInfo> Points //readonly Eigenschaft
        {
             get {
                 return points;
             }
        }

        public int SubPoints ///brauchts eigentlich nicht, da Zugriff auf Points.Count möglich
        {
             get {
                 return points.Count;
            }
        }
    }


ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
List<PointList> pointsToDraw = new List<PointList>(); //Liste erstellen

PointList pl = new PointList(); //Subliste wird automatisch durch Konstruktor erzeugt
pl.Points.Add(new PointsInfo());
pl.Points.Add(new PointsInfo()); // ... beliebig oft
pointsToDraw.Add(pl); // Eintrag hinzufügen

pl = new PointList();
//... das selbe Spiel von vorne ...


Der Witz ist halt, dass Du eine Liste verwendest, welche IIRC mindestens so schnell wie ein Array ist, dafür aber beliebig viele Elemente aufnehmen kann. Und man kann natürlich auch Elemente entfernen. Die Verwendung von Properties und Konstruktoren geht natürlich auch schon in VS2003 und sollte IMHO auch verwendet werden.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
PinkoPalino Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Di 17.07.07 09:35 
Danke!
Ich habe an Arrays gar nicht gedach, und wenn, dann hätte ich nicht gewuss wie!
Aber dank dir ist das ja kein Problem mehr.

Gegen VS 2005 spricht eigentlich nichts, aber bei meinem Arbeitsplatz ist nur VS 2003 drauf. Leider.

Danke