C# Zugriff auf Membervariablen - Array

die Felder m_XXX - beziehen sie sich jeweils auf einen struct oder auf alle structs?

Wie meinst du das?

So sieht mein Code derzeit aus:

Code:
    public struct Client_properties
    {
        public int Index;
        public string Name;
        public string PW;
        public string Message;
        public static bool[] m_CanAddClients = new bool[Variables.const_Max_Clients];
        public static bool[] m_AddedClients = new bool[Variables.const_Max_Clients];
        public static bool[] m_AddedByClients = new bool[Variables.const_Max_Clients];

    }

    public class Variables
    {
        public const int const_Max_Clients = 20;
        public static Client_properties[] m_Client = new Client_properties[const_Max_Clients];
    }

Der Array Variables.m_Client enthält 20x (Variables.const_Max_Clients) die Struktur Client_properties, die wiederrum neben Index, Name, PW und Message drei 3 Arrays aus je 20 booleans enthält.
 
Den Code lesen kann ich auch... ich weiß nur nicht, was du damit machen willst...

Das Ziel ist nicht, den Code so zu ändern, dass er compiliert - das ist Grundvoraussetzung - sondern dass er tut, was man will...

welche Bedeutung haben die Felder m_CanAddClients, m_AddesClients, m_AddedByClients denn?

Ich meine wenn jedes struct Client_properties drei Arrays zu je 20 Booleans enthalten soll, dann compiliert dein Code zwar so, aber ist nun mal schlicht und einfach falsch.
Denn die Klasse Client_properties hat eben eben genau drei mal diese Arrays, die sind aber innerhalb jeder Client_properties-Instanz identisch...

Wieso überhaut ein struct Client_properties? wieso nicht einfach

Code:
    public class Variables
    {
        public const int const_Max_Clients = 20;
        public static Client_properties[] m_Client = new Client_properties[const_Max_Clients];
    }

    public class Client_properties
    {
        public int Index;
        public string Name;
        public string PW;
        public string Message;
        public bool[] m_CanAddClients = new bool[Variables.const_Max_Clients];
        public bool[] m_AddedClients = new bool[Variables.const_Max_Clients];
        public bool[] m_AddedByClients = new bool[Variables.const_Max_Clients];
    }
 
Zuletzt bearbeitet:
Reicht "es compiliert/funktioniert" als Vorteil?

Gegenfrage: Warum hast du dich denn für "struct" entschieden?
 
weil ich nichts anderes kannte. Ich dachte, wenn man Variablen zusammenfasst, nimmt man struct. In Delphi hieß es noch record.

Ich bin auch nicht grade der C#-Experte. :)

...und funzen tuts auch mit class anstatt struct nicht...gleicher Fehler
 
Könntest du bitte den relevanten Code-Teil posten, den du zu compilieren versuchst? Weil du hast 100% noch die statics drin in Client_properties... Hab ich zwar schon zig mal gesagt und in meinem geposteten Code war's auch draußen aber was soll's... mir wird's nur zu mühseelig hier...

"Ich bin auch nicht grade der C#-Experte. " - hätte niemand bemerkt...

Übrigens beherrschte Delphi auch schon OOP - man muss mehrere Variablen nicht zwangsläufig in einem Record zusammenfassen. Selbst in Delphi würde ich da eigentlich eher Klassen nehmen...
 
Zuletzt bearbeitet:
ok, sorry, hatte noch static drin.

steh heut bissl neben mir, tut mir leid.

Es funzt jetzt, vielen Dank! :)

Gruß Thax

PS: Und warum bringt dieser Aufruf einen Fehler (steht auskommentiert drin):

Code:
for (int k = 1; k <= Variables.const_Max_Clients; k++)
{
      if (Variables.m_Client[k].Name != "")    [COLOR="Red"]//<- Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.[/COLOR]
      {
           listBox1.Items.Add(Variables.m_Client[k].Name + "    " + Variables.m_Client[k].Index);
      }
}
 
Zuletzt bearbeitet:
Weil Arrays in .net 0-basiert sind und nicht 1...

1. Element ist nicht array[1] sondern array[0]

Also von 0 bis k < maxClients zählen
 
nein, das ist nicht der Fehler.

Code:
for (int k = 0; k <= Variables.const_Max_Clients; k++)
{
      if (Variables.m_Client[k].Name != "")    //<- Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
      {
           listBox1.Items.Add(Variables.m_Client[k].Name + "    " + Variables.m_Client[k].Index);
      }
}

bringt auch keine Abhilfe. Der Fehler kommt im ersten Schleifendurchlauf.
 
Zuletzt bearbeitet:
Kann es sein, dass du hier versuchst, auf etwas zuzugreifen, dass nicht initialisiert ist?
Lass auch mal den Debugger drüber laufen, vielleicht hilft das weiter.

Gruß,

badday
 
Thaxll'ssillyia schrieb:
Code:
for (int k = 0; k [COLOR="Red"]<[/COLOR] Variables.const_Max_Clients; k++)
1. Der Text, den du eingegeben hast, ist zu kurz. Bitte erweitere den Text auf die minimale Länge von 1 Zeichen.
 
Naja ist klar, der Ausdruck
Code:
public static Client_properties[] m_Client = new Client_properties[const_Max_Clients];
legt auch nur das Array an, nicht die Objekte... die muss man selbst noch anlegen...

Aber wir sind halt keine Hellseher, die deinen gesamten Code kennen und sowas wissen können, dass du nirgends die Objekte an sich anlegst...
 
Legst du Client_properties auch irgendwo an mittels "new Client_properties()"?
Weil vom Gefühl her liegt's nicht am String...
 
Code:
   public class Variables
   {
        public const int const_Max_Clients = 20;
[COLOR="Lime"]        public static Client_properties[] m_Client = new Client_properties[const_Max_Clients];[/COLOR]
        public static int m_CurrentUsers;
        public static int Clients;
        public static string Usermanagement;
        public static int temp1;
        public static string temp2;

        public class Client_properties
        {
            public int Index;
            public string Name;
            public string PW;
            public string IP;
            public string Status;
            public string Location;
            public string Message;
            public bool[] m_CanAddClients = new bool[Variables.const_Max_Clients];
            public bool[] m_AddedClients = new bool[Variables.const_Max_Clients];
            public bool[] m_AddedByClients = new bool[Variables.const_Max_Clients];

        }
    }

da.
 
Naja ist klar, der Ausdruck
Code:
public static Client_properties[] m_Client = new Client_properties[const_Max_Clients];
legt auch nur das Array an, nicht die Objekte... die muss man selbst noch anlegen...

Ich bin mal weg, mir ist echt zu anstrengend fünf mal das selbe zu sagen zu müssen...
 
mhh, genau da bricht er nach der Zuweisung der ersten Variable ab.

Muss ich die Klasse Variables() erst instanzieren?
Weil woher weiß denn der Debugger von der Klasse?
 
Bist du von Beruf Hellseher?
Zu dem Schluss könnte ich kommen, schließlich hälst du die meisten hier für Hellseher, die genau wissen, wie die Zeile aussieht, welche zum Fehler führt...
 
Zurück
Oben