Hallo Community,
ich habe schon die msdn durchsucht und dieses Forum ebenso. Bin aber nicht wirklich zu einer Lösung gekommen (vielleicht sehe ich aber auch den Wald vor lauter Bäumen nicht mehr).
Das Problem:
public class Tag{
private string m_Name;
private eTagOption m_TagOption = 0;
public string Name{
get{ return this.m_Name; }
set{ this.m_Name = value; }
}
public eTagOption TagOption{
get{ return this.m_TagOption; }
set{ this.m_TagOption = value; }
}
public Tag(){
}
}
public class TagHashtable: System.Collections.Hashtable{
new public Tag this [Object key]{
get{ return ((Tag) base[key]); }
}
}
So. Die new public Tag this[Object key] Methode, habe ich so modifiziert, dass als Rückgabewert ein Tagobjekt geliefert wird.
Soweit so gut, aber wenn ich jetzt in einer Foreach Schleife die Hashtable durchlaufe, möchte ich auch gerne dass man gleich ein Tag Objekt zurückbekommt, anstatt des object Objekt.
Zur zeit durchlaufe ich die Collection so (gibt natürlich auch ein object Objekt zurück):
System.Collections.IEnumerator en = col.Values.GetEnumerator();
while(en.MoveNext()){
Tag oTag = (Tag) en.Current.
...
}
Aber es gibt da ja auch diese Möglichkeit:
foreach(DictonaryEntry oTag in col){
...
}
So, in beiden Fällen muss ich natürlich einen Cast machen.
Schau mal in der SDK Doku unter DictionaryBase-Klasse. Da ist eine Beispiel-Implementierung für eine ShortStringDictionary-Klasse.
warum nicht einfach:
foreach(Tag tag in col.Values)
{
...
}
das klaptt sogar mit eine standard Hashtable. Allerdings nur, wenn ausschliesslich Tag objekte in den Values gespeichert sind.
Danke für die schnellen Antworten!
@Noodles, danke. So kann ich eine Collection erstellen, in dem nur Tag Objekte gespeichert werden dürfen.
@cadi, danke. Das habe ich nicht gewusst... und es klappt 🙂.
Gruß
Bakunin