Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > .NET Languages
You last visited: Today at 05:22

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Wie erstelle ich ein Array mit einem Enum?

Discussion on Wie erstelle ich ein Array mit einem Enum? within the .NET Languages forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 6
Join Date: Dec 2010
Posts: 295
Received Thanks: 86
Smile Wie erstelle ich ein Array mit einem Enum?

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:

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
Ortator is offline  
Old 03/14/2017, 13:46   #2
 
Ludder231's Avatar
 
elite*gold: 0
Join Date: Aug 2010
Posts: 880
Received Thanks: 113
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



        }
    }
}
Ludder231 is offline  
Thanks
1 User
Old 03/14/2017, 14:10   #3
 
elite*gold: 6
Join Date: Dec 2010
Posts: 295
Received Thanks: 86
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

Edit:

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

Wie behebe ich diesen?
Ortator is offline  
Old 03/14/2017, 15:06   #4
 
mrapc's Avatar
 
elite*gold: 238
Join Date: Sep 2009
Posts: 2,327
Received Thanks: 1,164
Quote:
Originally Posted by Ortator View Post
Danke

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.
mrapc is offline  
Thanks
1 User
Old 03/14/2017, 16:07   #5
 
elite*gold: 6
Join Date: Dec 2010
Posts: 295
Received Thanks: 86
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 !
Ortator is offline  
Old 03/14/2017, 22:45   #6
 
elite*gold: 0
Join Date: Mar 2017
Posts: 11
Received Thanks: 5
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.
0F00 is offline  
Thanks
1 User
Old 03/15/2017, 00:07   #7
 
mrapc's Avatar
 
elite*gold: 238
Join Date: Sep 2009
Posts: 2,327
Received Thanks: 1,164
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:


und Hier mal ein Array:
mrapc is offline  
Thanks
1 User
Old 03/15/2017, 05:49   #8
 
YatoDev's Avatar
 
elite*gold: 50
Join Date: Sep 2012
Posts: 3,841
Received Thanks: 1,462
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:
YatoDev is offline  
Thanks
1 User
Old 03/15/2017, 08:20   #9
 
elite*gold: 0
Join Date: Mar 2017
Posts: 11
Received Thanks: 5
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:


und Hier mal ein Array:

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.
0F00 is offline  
Old 03/15/2017, 08:48   #10
 
mrapc's Avatar
 
elite*gold: 238
Join Date: Sep 2009
Posts: 2,327
Received Thanks: 1,164
Quote:
Originally Posted by YatoDev View Post

PS:
"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#.
mrapc is offline  
Old 03/15/2017, 17:50   #11
 
YatoDev's Avatar
 
elite*gold: 50
Join Date: Sep 2012
Posts: 3,841
Received Thanks: 1,462
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
YatoDev is offline  
Thanks
1 User
Old 03/15/2017, 21:30   #12
 
mrapc's Avatar
 
elite*gold: 238
Join Date: Sep 2009
Posts: 2,327
Received Thanks: 1,164
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
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.
mrapc is offline  
Thanks
1 User
Old 03/24/2017, 19:46   #13
 
elite*gold: 6
Join Date: Dec 2010
Posts: 295
Received Thanks: 86
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:


und Hier mal ein Array:


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
Ortator is offline  
Reply


Similar Threads Similar Threads
Zwei 1D Arrays zu einem 2D Array zusammenfassen
01/09/2016 - AutoIt - 2 Replies
Guten Abend, Ich möchte beispielsweise diese zwei 1D Arrays: $array1= $array2= zusammenfassen, dass der 2D Array so aussieht: Hello|this
[java] arbeiten mit einem array?
12/18/2014 - Java - 3 Replies
#solved <3
[Java] Wie erzeuge ich aus einem Jsoup Element ein Array?
08/22/2012 - General Coding - 2 Replies
Hi bin gerade dabei eines meiner ersten Java Programme zu "programmieren". Das ganze soll eine EinsatzSMS Anwendung für eine Feuerwehr werden. Hier mal mein Code: EinsatzSmS - Pastebin.com Verwendete Library: jsoup Java HTML Parser, with best of DOM, CSS, and jquery
Mit einem Array arbeiten
12/02/2011 - AutoIt - 4 Replies
Moin, ich versuche gerade, sinnvoll mit einem definierten Array zu arbeiten: dim $myArray Ich möchte eine Funktion erstellen, die dem Array den im Funktionsparameter angegebenen Wert hinzufügt oder wenn selbiger bereits im Array existiert, aus selbigem entfernt: Func addToArr($param)



All times are GMT +1. The time now is 05:23.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.