Wpis z mikrobloga

Mam problem z następującą metodą https://pastebin.com/bHSQCBCR Mam napisać metodę wykonaj(), która dla podanych jako argument delegatów (procedur) wykona je kolejno na przechowywanej w klasie tablicy, np.:
tablica = new TablicaObliczeniowa(1, 2, 5, 4, 3);
tablica.Wykonaj(Array.Sort, Array.Reverse);
Console.WriteLine(tablica); // wypisze: [5, 4, 3, 2, 1]
Mogę skorzystać z delegata action(), ale nie mam pojęcia jak to zrobić? Pomożecie?

#csharp #programowanie
  • 7
@ksMaras: No to w tym co jest w pastebin jest prawie dobrze. Kilka uwag:
1. Pojedyncza operacja np Array.Sort jako argument bierze tablice intów czyli int[] i nie zwraca niczego czyli odpowiedni delegat dla pojedynczej operacji to: Action. W twoim przypadków chcesz mieć tablice takich delegatów, czyli: Action[]
2. Potem jak wywołujesz to nie musisz i nawet nie możesz przekazywać argumetu przez referencje wieć skasuj słówko kluczowe ref

3. Lepiej
@ksMaras: Zależy co chcesz żeby było twoim typem... co ma znaczyć TablicaObliczeniowa? Naturalną odpowiedzią jest, że chcesz, aby elementy tej tablicy były typu T. Obecnie klasa jako elementy ma int'y. Tak więc pierwsze co musisz zrobić to zamienić public int[] tab; na public T[] tab;. Dalej już jak możesz zamieniać int na T tam gdzie kompilator się wywala błędy. Podejrzewam, że w rezultacie zamienisz wszystkie int na T.
Dobra, nieaktualne. Już sobie poradziłem


@ksMaras: Jak pytasz publicznie, to rozwiązanie podaj też publicznie, może się przydać komuś kto w przyszłości będzie szukał rozwiązania podobnego problemu.