Wie erstelle ich ein Array mit einem Enum?

03/14/2017 13:34 Ortator#1
Hallo,

da ich gerade dabei bin C# etwas zu lernen wollte ich mal Fragen wie ich einen Array mit einem Enum erstelle?

Bin gerade dabei einen P-Server zu schreiben und dies funktioniert bisher ganz gut nun möchte ich allerdings das die ID des TCP Clienten der sich mit mir verbindet in einen Array gespeichert wird.

Bestes Beispiel wie ich es haben möchte währe der SA-MP: [Only registered and activated users can see links. Click Here To Register...]

Code:
enum
	e_PlayerInfo
{
	SCORE,
	MONEY,
	KILLS,
	DEATHS
};

new pInfo[MAX_PLAYERS][e_PlayerInfo];

// dann einfach wenn jemanden verbindet halt zb:
pInfo[playerid ( zB. 434343 )][Money] = 5555;
Wie verwirkliche ich soetwas in C#?

Danke falls jemand einen Tip hat :bandit:
03/14/2017 13:46 Ludder231#2
meinst du so?

Code:
e_PlayerInfo[] array = new e_PlayerInfo[5];

array[0] = e_PlayerInfo.DEATHS;
Du musst wissen, dass man enums keine Werte zuweisen kann. Vllt brauchst du ne Class oder ein struct.

EDIT:

wolltest du es evtl. so machen?

Code:
namespace ConsoleApplication1
{

    public class e_PlayerInfo
    {
        public int MONEY { get; set; }
        public int SCORE { get; set; }
        public int KILLS { get; set; }
        public int DEATHS { get; set; }

    }

    class Program
    {
        
        static void Main(string[] args)
        {

            e_PlayerInfo[] pInfo = new e_PlayerInfo[5]; // 5 = anzahl player

            pInfo[0].MONEY = 5555; // 0 = index



        }
    }
}
03/14/2017 14:10 Ortator#3
Quote:
Originally Posted by Ludder231 View Post
meinst du so?

Code:
e_PlayerInfo[] array = new e_PlayerInfo[5];

array[0] = e_PlayerInfo.DEATHS;
Du musst wissen, dass man enums keine Werte zuweisen kann. Vllt brauchst du ne Class oder ein struct.

EDIT:

wolltest du es evtl. so machen?

Code:
namespace ConsoleApplication1
{

    public class e_PlayerInfo
    {
        public int MONEY { get; set; }
        public int SCORE { get; set; }
        public int KILLS { get; set; }
        public int DEATHS { get; set; }

    }

    class Program
    {
        
        static void Main(string[] args)
        {

            e_PlayerInfo[] pInfo = new e_PlayerInfo[5]; // 5 = anzahl player

            pInfo[0].MONEY = 5555; // 0 = index



        }
    }
}
Danke :D

Edit:

Ich bekomme aber derbei den Fehler: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.

Wie behebe ich diesen?
03/14/2017 15:06 mrapc#4
Quote:
Originally Posted by Ortator View Post
Danke :D

Edit:

Ich bekomme aber derbei den Fehler: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.

Wie behebe ich diesen?
naja du muss die Instanz ja auch erst einmal anlegen.

Tritt ein Spieler bei musst du den Spieler verarbeiten
Code:
e_PlayerInfo neuerSpieler
und diesen dann in dein Array einpflegen
Code:
pInfo[0] = neuerSpieler
danach kannst du dann im Array den Wert zuweisen
Code:
pInfo[0].MONEY = 5000
Das ist aber noch nicht zwangsläufig ganz sauber und ich würde bei den Spielern auch nicht mit einem Array sondern mit einer List(Of ...) Arbeiten.
Das hat den Vorteil das du schnell einen Spieler wieder raus nehmen kannst oder einen anderen Einfügen kannst.
03/14/2017 16:07 Ortator#5
Quote:
Originally Posted by mrapc View Post
naja du muss die Instanz ja auch erst einmal anlegen.

Tritt ein Spieler bei musst du den Spieler verarbeiten
Code:
e_PlayerInfo neuerSpieler
und diesen dann in dein Array einpflegen
Code:
pInfo[0] = neuerSpieler
danach kannst du dann im Array den Wert zuweisen
Code:
pInfo[0].MONEY = 5000
Das ist aber noch nicht zwangsläufig ganz sauber und ich würde bei den Spielern auch nicht mit einem Array sondern mit einer List(Of ...) Arbeiten.
Das hat den Vorteil das du schnell einen Spieler wieder raus nehmen kannst oder einen anderen Einfügen kannst.
Vielen dank für deine Antwort.

Könntest du mir vll erklären wie ich das jetz zB. auf das Beispiel von Oben beziehe das jeder Spieler eine "List" bekommt und darin seine Daten "gespeichert" werden sag ich mal.

Fg

Okay hat sich geklärt nach erfolgreichen durchlesen mehrerer Tutorials hab ich es verstanden :)

Danke !
03/14/2017 22:45 0F00#6
Ich möchte Vorweg eine Aussage von einem Vorredner Ausbessern. Eigentlich sind List und Array genau das gleiche nur das ein Array eine vordefinierte Größe besitzen musst oder du erweiterst diese und speicherst den Inhalt des Alten Arrays unter und ersetzt ihn dann mit dem Neuen Array. Also ganz einfach was dir Hilft funktioniert so :

Code:
public class Player
{
      public int Money;
      public Vector3 Position;
      public Socket Socket;
}
Wenn du jetzt sagst du hast in einem Match eine fixe Anzahl anspielern kannst du ein Array nutzen. Falls nicht würd es sich Empfehlen ne List zu nutzen. Vorteil: Ein Array ist durch ihre fixierte Größe beim Arbeiten immer weitaus schneller als eine List.
Eine List kannst du mit Capacity zB. begrenzen.

Also dann weiters:
Falls Array

Code:
public Player Pl;
Zugreifen tust du beim Array

Code:
public void Method()
{
      Pl[0].Money = 500;
}

Neuen Spieler erstellen :

Code:
public void CreateNewPlayer()
{
      Player p = new Player();
      p.Money = 500;
      p.Position = new Vector3(0,0,0);
      //Hier solltest du dann Nachfragen wo der Nächst Freie Platz ist
      Pl[index] = p; //index ist der Freie Platz
}
List Funktioniert genauso nur du brauchst dich nicht drumkümmern wo der freie Platz ist da es einfach am Ende hinzugefügt wird

Code:
public void CreateNewPlayer()
{
      Player p = new Player();
      p.Money = 500;
      p.Position = new Vector3(0,0,0);
      Pl.Add(p); //index ist der Freie Platz
}
Zum Ändern von Werten musst du jedoch eine List erst kurz zum Array umwandeln und dann überschreiben.

Ich hoffe ich konnte dir damit eine Aufschlussreiche Anwort bieten.

Grüße
0F00


Hinzufügen möchte ich noch Enums sind eigentlich Zustände wenn ich es jetzt so ausdrücken kann ohne Ärger zu bekommen.
Also du kannst damit Zustände speichern zB ob dieser NPC Freundlich, Passiv oder Aggresiv ist.
Es erleichtert bei solchen Sachen die handhabung um vieles Überhaupt wenn es um den Bereich Netzwerkübertragung geht.

Ein Int mit 1 Wert in Bit umgerechnet ist weitaus kleiner, als ein string mit "NPC_Friendy" in Bits.
03/15/2017 00:07 mrapc#7
Ich dachte an soetwas:

Ich habs auch mal etwas Dokumentiert, falls du Fragen hast kannst du diese aber gerne Stellen.

Quote:
Originally Posted by 0F00 View Post
Ich möchte Vorweg eine Aussage von einem Vorredner Ausbessern. Eigentlich sind List und Array genau das gleiche nur das ein Array eine vordefinierte Größe besitzen musst oder du erweiterst diese und speicherst den Inhalt des Alten Arrays unter und ersetzt ihn dann mit dem Neuen Array. Also ganz einfach was dir Hilft funktioniert so :
Eine Liste ist nicht das selbe wie ein Array.
Im NET-Framework ist die List Klasse aber sehr gut, im Grundsatz Arbeiten Listen und Arrays aber komplett unterschiedlich. Ein Array muss keine Vordefinierte größe haben, bzw. ist durchaus vergrößerbar. Der Unterschied ist das bei einem Array jeder Wert in einem "Slot" ist.
In einer Liste zeigt jeweils ein Pointer auf das Object das davor kommt (auf Null wenn es das erste ist, sowie auch auf null wenn es das letzte ist) und auf das Object welches als nächstes kommt.

Hier mal ein Beispiel für eine Liste:
[Only registered and activated users can see links. Click Here To Register...]

und Hier mal ein Array:
[Only registered and activated users can see links. Click Here To Register...]
03/15/2017 05:49 YatoDev#8
Quote:
Originally Posted by mrapc View Post
Eine Liste ist nicht das selbe wie ein Array.

....
Doch ist sie. Das Bild veranschaulicht eine Doubly linked list. Also eine Liste mit Next() und Previous() Pointern.

Eine .Net List<T> ist ein array mit dynamischer größe.

PS: [Only registered and activated users can see links. Click Here To Register...]
03/15/2017 08:20 0F00#9
Quote:
Originally Posted by mrapc View Post
Ich dachte an soetwas:

Ich habs auch mal etwas Dokumentiert, falls du Fragen hast kannst du diese aber gerne Stellen.



Eine Liste ist nicht das selbe wie ein Array.
Im NET-Framework ist die List Klasse aber sehr gut, im Grundsatz Arbeiten Listen und Arrays aber komplett unterschiedlich. Ein Array muss keine Vordefinierte größe haben, bzw. ist durchaus vergrößerbar. Der Unterschied ist das bei einem Array jeder Wert in einem "Slot" ist.
In einer Liste zeigt jeweils ein Pointer auf das Object das davor kommt (auf Null wenn es das erste ist, sowie auch auf null wenn es das letzte ist) und auf das Object welches als nächstes kommt.

Hier mal ein Beispiel für eine Liste:
[Only registered and activated users can see links. Click Here To Register...]

und Hier mal ein Array:
[Only registered and activated users can see links. Click Here To Register...]

Es ist zwar schön und gut aber wenn du ein Array keine fertige Größe Gibts verliert es an Performance und du hast den Vorteil von einem Array schon verloren und kannst gleich ne List nutzen.

Aber ich wollte das jetzt garnicht so ausarten lassen, ich denke das hiermit mit der genauen Erklärung der Threadersteller sicher überfordert sein wird.

Und außerdem List und net Liste.
03/15/2017 08:48 mrapc#10
Quote:
Originally Posted by YatoDev View Post

PS: [Only registered and activated users can see links. Click Here To Register...]
"Coding Standards" sind wie Verkehrsregeln.
Ganz nett und in DE halten sich alle an die selben, aber probier mal die Deutschen Verkehrsregeln in Indien anzuwenden.

Vieles von dem was dort steht ist tatsächlich ein Standard wie zum Beispiel die CAPS Regel bei Const.
Sogar die Math Klasse hält sich sonst nicht an die Standards:
Math.PI
nicht
Math.Pi

Aber du hast recht ich war gerade irgendwie bei dem Begriff list im Allgemeinen nicht C#.
03/15/2017 17:50 YatoDev#11
Quote:
Originally Posted by mrapc View Post
"Coding Standards" sind wie Verkehrsregeln.
Ganz nett und in DE halten sich alle an die selben, aber probier mal die Deutschen Verkehrsregeln in Indien anzuwenden.

Vieles von dem was dort steht ist tatsächlich ein Standard wie zum Beispiel die CAPS Regel bei Const.
Sogar die Math Klasse hält sich sonst nicht an die Standards:
Math.PI
nicht
Math.Pi
Das war ja nicht böse gemeint aber so etwas konsequent zu ignorieren triggerd mich schon irgendwie^^

Ist klar das man das nicht immer 100% durchziehen kann (auch microsoft nicht) dennoch erhöht das die lesbarkeit und wiederverwendbarkeit um einiges.

Das was mich tatsächlich am meisten gestört hat ist das du klassen deutsche namen gegeben hast und dann so lustige methoden wie setName (anstatt properties) und getSpielerByName hast. Wobei dann alleSpielerEntfernen sich wiederum noch ganz gut anhört weshalb man es ganz auf deutsch schreiben könnte.

Außerdem

Code:
foo()
{
}

bar{
}
vermischt:D
03/15/2017 21:30 mrapc#12
Quote:
Originally Posted by YatoDev View Post
Das war ja nicht böse gemeint aber so etwas konsequent zu ignorieren triggerd mich schon irgendwie^^

Ist klar das man das nicht immer 100% durchziehen kann (auch microsoft nicht) dennoch erhöht das die lesbarkeit und wiederverwendbarkeit um einiges.

Das was mich tatsächlich am meisten gestört hat ist das du klassen deutsche namen gegeben hast und dann so lustige methoden wie setName (anstatt properties) und getSpielerByName hast. Wobei dann alleSpielerEntfernen sich wiederum noch ganz gut anhört weshalb man es ganz auf deutsch schreiben könnte.

Außerdem

Code:
foo()
{
}

bar{
}
vermischt:D
Naja ich kann mich ja nicht an Regeln halten die man mir nicht sagt.

In der Schule hieß es immer Const alles groß.
Funkionen stehts am Anfang klein.
Variablen komplett klein.

Ob auf Deutsch oder englisch ist dir überlassen.

Im Studium dann egal wie, aber immer die get Mothode mit "getVarName "beginnen und die set Methode mit "setVarName"

Das wird dir schon aufstoßen und genau das ist der Punkt weshalb ich diese Standards nicht mag, jeder macht da seine eigenen, jeder stellt seine als die geltenden hin und alle streiten sich, währenddessen mach ich mein Ding, schreibe wie es mir passt und am Ende des Tages Funktioniert es und ich Dokumentiere es aus damit auch jeder andere Horst versteht was ich gemeint habe.
03/24/2017 19:46 Ortator#13
Quote:
Originally Posted by mrapc View Post
Ich dachte an soetwas:

Ich habs auch mal etwas Dokumentiert, falls du Fragen hast kannst du diese aber gerne Stellen.



Eine Liste ist nicht das selbe wie ein Array.
Im NET-Framework ist die List Klasse aber sehr gut, im Grundsatz Arbeiten Listen und Arrays aber komplett unterschiedlich. Ein Array muss keine Vordefinierte größe haben, bzw. ist durchaus vergrößerbar. Der Unterschied ist das bei einem Array jeder Wert in einem "Slot" ist.
In einer Liste zeigt jeweils ein Pointer auf das Object das davor kommt (auf Null wenn es das erste ist, sowie auch auf null wenn es das letzte ist) und auf das Object welches als nächstes kommt.

Hier mal ein Beispiel für eine Liste:
[Only registered and activated users can see links. Click Here To Register...]

und Hier mal ein Array:
[Only registered and activated users can see links. Click Here To Register...]


Vielen dank für diese sehr Hilfreiche Antwort !

Ich war jetz ein paar Tage inaktiv aufgrund von "arbeiten" an meiner Wohnung. ( Sonst hötte ich ehern geantwortet )

Sehr nützliches "Tutorial" hast du mir jetz gezeigt :)

Mit freundlichen Grüßen,

Ortator