| 

.NET C# Java Javascript Exception

5
Wie kann ich in einer C#-Klasse eine Eigenschaft einführen, die eine Aufzählung darstellt. Also sowas in der Richtung:
MyClass myclass = new MyClass();
var q = myclass[34];
29.03.2011
Latte 51 3
4 Antworten
4
Die Antwort von Jürgen ist zwar sehr schön und ausführlich, irgendwie werde ich aber das Gefühl nicht los, das Du etwas wesentlich trivialeres meinst: Ein öffentliches Array/Liste als Property welche als Defaultproperty hinterlegt ist.

public MyClass() {
//Liste Initalisieren
_liste = new List<string>();
for (int i = 0; i < 41; i++) {
_liste.Add("Nummer " + i.ToString());
}
}

private List<String> _liste;
public String this[int index] {
get { return _liste[index]; }
set { _liste[index] = value; }
}

Lässt sich dann wie folgt benutzen:
MyClass myclass = new MyClass();
var q = myclass[34];

q ist vom Typ String und beinhaltet den Wert "Nummer 34".
Durch das "this" in "public String this[int index]" hast Du festgelegt, das diese Property als Default für diese Klasse angenommen wird. Deshalb kannst Du dann mit myclass[34] darauf zugreifen.
29.03.2011
Jens Duczmal 2,6k 1 3 9
oh, wir haben wohl zugleich gepostet ;]
pinchbeck 29.03.2011
Gutes Timing :)
Jens Duczmal 29.03.2011
2
Schau dir mal an, ob dieser Code dich weiterbringt:
public class MyClass
{
private readonly string _name;

public MyClass(string name)
{
_name = name;
MyClassList.Add(this);
}

static readonly List<MyClass> MyClassList = new List<MyClass>();

public static void Show()
{
foreach (var myClass in MyClassList)
{
Console.WriteLine(myClass._name);
}

}

public static MyClass Get(int index)
{
return MyClassList[index];
}
}


Der Aufruf könnte wie folgt aussehen:
MyClass myClass1 = new MyClass("Klasse1");
MyClass myClass2 = new MyClass("Klasse2");
MyClass myClass3 = new MyClass("Klasse3");
MyClass.Show();
MyClass myClassGet2 = MyClass.Get(1);


Hinweis: Über das Dispose-Pattern solltest du Objekte aus der Liste wieder entfernen.

Jetzt habe ich den Code noch etwas erweitert. Mit der Zeile: MyClass myClassGet2 = MyClass.Get(1);
kannst du wie mit einem Index auf deine Liste von Klassenobjekten zugreifen.
Natürlich müssten noch Exception-Handling etc. eingebaut werden.
29.03.2011
Jürgen Luhr 7,1k 1 9
2
public class MyClass
{
List<String> list = new List<String>();

public String this[int index]
{
get
{
return list[index];
}
}
}
29.03.2011
pinchbeck 373 1 8
-1
... oder vielleicht noch viel einfacher als enumeration?

public enum IRGENDEINEZAHL { WertA, WertB }


class myClass
{

IRGENDEINEZAHL marker = IRGENDEINEZAHL.WertA;

......
30.03.2011
wurzelchen 289 5
wie soll das denn bitte einfacher sein? das hat doch mit der Frange des OPs nichts zu tun :|
pinchbeck 30.03.2011
mit dem header der frage nicht, mit der frage schon - wenn die property eine fixe auswahl ist, würde ich meinen eine enumeration reicht völlig.
die "komplizierteren" konstrukte braucht es ja nur wenn dynamische auswahl-werte dargestellt werden müssen
wurzelchen 30.03.2011
ich sehe da keinen zusammenhang... aber ist auch egal... las uns woanders jetzt posten ;P
pinchbeck 30.03.2011

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH