Chris_S04
Commander
- Registriert
- Mai 2011
- Beiträge
- 2.419
Hallo,
ich bin neulich über ein Problem mit den Delegates in C# gestolpert. Und zwar habe ich einen generischen Datenpool, welcher in Form einer verketteten Liste vorliegt. Die ganzen Operationen mit dieser funktionieren soweit auch sehr gut, allerdings gibt es dann noch das Probelm, dass es eine Funktion voidForAll (FktDelegate f) gibt, welche für eine passende übergebene Funktion diese auf alle Elemente des Pools anwenden soll. Hierfür muss ein generisches Delegate FktDelegate mit einem generischen Eingangs- und Returnparameter definiert werden. Abschließend muss die ForAll-Methode aus einer anonymen Methode heraus aufgerufen werden, welche die Daten im Datenpool verändern soll (z.B. es stehen Integer in dieser Liste und diese sollen quadriert werden).
Und genau da liegt eben das Problem. Ich bin derzeit so weit:
class ListenElement<T>
{
public T _Wert;
public ListenElement<T> _Next;
}
class Queue<T> : IEnumerable
{
public ListenElement<T> _ListenAnfang = null;
public void Append(T _Value)
{
if (this._ListenAnfang == null)
{
this._ListenAnfang = new ListenElement<T>();
this._ListenAnfang._Wert = _Value;
}
else
{
ListenElement<T> Hangler = new ListenElement<T>();
Hangler = _ListenAnfang;
while (Hangler._Next != null)
{
Hangler = Hangler._Next;
}
Hangler._Next = new ListenElement<T>();
Hangler._Next._Wert = _Value;
}
}
public IEnumerator GetEnumerator()
{
ListenElement<T> Hangler = new ListenElement<T>();
Hangler = this._ListenAnfang;
while (Hangler._Next != null)
{
yield return Hangler;
Hangler = Hangler._Next;
}
}
}
delegate T FktDelegate<T>(T _Variable);
class Program
{
public void ForAll<T>(FktDelegate<T> _Del)
{
// leider kA, was hier zu tun ist
}
static void Main(string[] args)
{
Queue<int> Liste = new Queue<int>();
Liste.Append(1);
Liste.Append(2);
Liste.Append(3);
foreach (ListenElement<int> LE in Liste)
{
Console.WriteLine(LE._Wert);
}
// Nun müssen per Delegate und der anonymen Methode die zahlen der Queue noch quadriert werden
}
}
Nun habe ich wie gesagt leider keine Ahnung, wie ich mit diesem Delegate umzugehen habe, bzw. wie ich diese Aufgabenstellung per Delegate realisieren soll. Ich hoffe, dass ihr mir weiter helfen könnt. Schon einmal vielen Dank im Voraus für euere Mühe!
Mit freundlichen Grüßen
Chris_S04
ich bin neulich über ein Problem mit den Delegates in C# gestolpert. Und zwar habe ich einen generischen Datenpool, welcher in Form einer verketteten Liste vorliegt. Die ganzen Operationen mit dieser funktionieren soweit auch sehr gut, allerdings gibt es dann noch das Probelm, dass es eine Funktion voidForAll (FktDelegate f) gibt, welche für eine passende übergebene Funktion diese auf alle Elemente des Pools anwenden soll. Hierfür muss ein generisches Delegate FktDelegate mit einem generischen Eingangs- und Returnparameter definiert werden. Abschließend muss die ForAll-Methode aus einer anonymen Methode heraus aufgerufen werden, welche die Daten im Datenpool verändern soll (z.B. es stehen Integer in dieser Liste und diese sollen quadriert werden).
Und genau da liegt eben das Problem. Ich bin derzeit so weit:
class ListenElement<T>
{
public T _Wert;
public ListenElement<T> _Next;
}
class Queue<T> : IEnumerable
{
public ListenElement<T> _ListenAnfang = null;
public void Append(T _Value)
{
if (this._ListenAnfang == null)
{
this._ListenAnfang = new ListenElement<T>();
this._ListenAnfang._Wert = _Value;
}
else
{
ListenElement<T> Hangler = new ListenElement<T>();
Hangler = _ListenAnfang;
while (Hangler._Next != null)
{
Hangler = Hangler._Next;
}
Hangler._Next = new ListenElement<T>();
Hangler._Next._Wert = _Value;
}
}
public IEnumerator GetEnumerator()
{
ListenElement<T> Hangler = new ListenElement<T>();
Hangler = this._ListenAnfang;
while (Hangler._Next != null)
{
yield return Hangler;
Hangler = Hangler._Next;
}
}
}
delegate T FktDelegate<T>(T _Variable);
class Program
{
public void ForAll<T>(FktDelegate<T> _Del)
{
// leider kA, was hier zu tun ist
}
static void Main(string[] args)
{
Queue<int> Liste = new Queue<int>();
Liste.Append(1);
Liste.Append(2);
Liste.Append(3);
foreach (ListenElement<int> LE in Liste)
{
Console.WriteLine(LE._Wert);
}
// Nun müssen per Delegate und der anonymen Methode die zahlen der Queue noch quadriert werden
}
}
Nun habe ich wie gesagt leider keine Ahnung, wie ich mit diesem Delegate umzugehen habe, bzw. wie ich diese Aufgabenstellung per Delegate realisieren soll. Ich hoffe, dass ihr mir weiter helfen könnt. Schon einmal vielen Dank im Voraus für euere Mühe!
Mit freundlichen Grüßen
Chris_S04
Zuletzt bearbeitet: