Forum: PC-Programmierung [C#] Klasse - Indexer


von Dex D. (dexter)


Lesenswert?

Hallo zusammen

Ich habe folgenden Code:
1
namespace Config
2
{
3
  public class AppConfig : Object
4
  {
5
    private string[] user = new string[8];
6
7
    public string this[int i]
8
        {
9
            get { return user[i]; }
10
            set { user[i] = value; }
11
        }

Wie kann ich nun innerhalb der Klasse den Array's einen (nicht 
definierten) Wert zuweisen?

von Markus (Gast)


Lesenswert?

Hi dexter,

was genau verstehst Du denn unter "einen (nicht definierten) Wert 
zuweisen"?

Nicht definiert oder zuweisen? Das schließt sich IMHO aus. Im Übrigen 
ist es unter .NET gewährleistet, daß beim Instantiieren eines Arrays 
(new []) die Array-Elemente auf einen definierten Wert initialisiert 
werden (z.B. 0 bei int-Arrays, null bei Objektreferenz-Arrays, ...). Im 
Fall von string-Referenzen ist dies null. Vermutlich meinst Du diesen 
Wert mit "undefiniert". Wenn ein Array einmalig beim Erzeugen eines 
Objektes vorbelegen will, nimmt man dafür einen Konstruktor:
1
namespace Config
2
{
3
  public class AppConfig : Object
4
  {
5
    private string[] user;
6
    public AppConfig()
7
    {
8
        user = new string[8];
9
        foreach( string u in user )
10
        {
11
            u = string.Empty;
12
        }
13
    }
14
  }
15
  public string this[int i]
16
  {
17
      get { return user[i]; }
18
      set { user[i] = value; }
19
  }
20
}
Übrigens ist die explizite Ableitung von Object überflüssig: Jede Klasse 
erbt automatisch von Object.

Gruß
Markus

von Arc N. (arc)


Lesenswert?

Aus "einen (nicht definierten) Wert zuweisen" kann man alles mögliche 
herauslesen:
- Nullable-Typ wie z.B. bool? xyz, was nur mit Werttypen funktioniert 
(Referenztypen können das automatisch)
- soll die Variable initialisiert werden wie z.B.
1
  private string[] user = new string[8] { "1", "2", "3" ... };
- wenn's tatsächlich um Anwendungseinstellungen geht, wäre die 
eingebaute Lösung mit ApplicationSettingsBase (wovon automatisch eine 
benutzbare Variante erzeugt wird, wenn man die Einstellungen unter 
Projekt->Eigenschaften->Einstellungen (Project->Properties->Settings) 
macht) sinnvoller

von Dex D. (dexter)


Lesenswert?

Sry das war vielleicht falsch formuliert.. Ich wollte damit sagen, der 
Wert der zugewiesen wird ist nicht immer der gleiche. Er wird aus einer 
XML-Datei ausgelesen.

Das ganze wird in einem ProbertyGridEx verwendet:
1
property.Add("User", ref me, string Array (this[0]), false, ...);

Beim eintrag "string Array" steht sonst der String Name.
1
namespace Config
2
{
3
  public class AppConfig : Object
4
  {
5
    private string[] user = new string[8];
6
7
    public string User
8
        {
9
            get { return user; }
10
            set { user = value; }
11
        }
12
    ...
13
    property.Add("User", ref me, "User", false,...);
14
    ...
15
  }
16
}

Meine Frage ist nund wie ich das bei dem Array mache...

von Arc N. (arc)


Lesenswert?

Welches PropertyGridEx?

von Dex D. (dexter)


Lesenswert?

Ist eine erweiterung vom PropertyGrid. http://www.codeproject.com
Da habe ich gleich die Möglichkeit alle Daten in einem XML 
abzuspeichern.

Aber eigentlich geht es ja nur um die Frage, wie ich den Array dort 
eingebe...

von Arc N. (arc)


Lesenswert?

Dieses http://www.codeproject.com/KB/tabs/PropertyGridEx.aspx?
Dann steht unten in den Kommentaren ein VB-Beispiel.
1
Private Sub Form1_Load(ByVal sender As Object, ByVal e As   System.EventArgs) Handles Me.Load
2
    Dim PrtyGrid As New PropertyGridEx.PropertyGridEx
3
    Dim Texts As String() = {"ab", "cd", "ef", "jk", "lm", "op"}
4
    Me.Controls.Add(PrtyGrid)
5
    With PrtyGrid
6
        .ShowCustomProperties = True
7
        .Item.Add("Prove", Texts, True, "Category", "Thi's the description field", True)
8
        .Refresh()
9
    End With
10
End Sub

von Dex D. (dexter)


Lesenswert?

Daraus werde ich nicht wirklich schlau...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.