Brakuje mi dwóch średników :| Czyli nie rozumiem czemu moja składnia jest zła

0

Podkreśla mi pierwszą i drugą linijkę ciała funkcji. Co zrobić? Mógłbym wpisać na sztywno nazwę typu, ale chciałbym to zrobić tak. Jak to naprawić?

        public bool Compare(SequenceListElement element)
        {
            if (!element is this.GetType()) {
                return false;
            }
            // tratatata
            return true;
        }
2

Podawaj chociaż jaki błąd kompilator wypisuje, byłoby prościej (i pewnie dokładnie mówi o co chodzi).

Ale odnośnie błędu - tak nie można.
Za to możesz zrobić tak:

if (element.GetType() == this.GetType())

edit:
No i w tym co podałeś jest jeszcze jeden błąd:

if (!element is this.GetType()) {

czytaj: jeśli !element jest typu this.GetType()?

0

Dlaczego mogę zrobić

if (element is MyClass)

else nie mogę

 if (element is this.GetType())

? Msdn mówi że ta funkcja zwraca Type czyli do tym jest MyClass.

2

Nie, MyClass jest nazwą typu, a nie typem.

Nie możesz zrobić np:

Type x = MyClass; // sprawdź

to nie python.

Możesz zrobić:

Type x = typeof(MyClass);

Przy is wystarczy MyClass, bo is to operator.

0

Napisz może co chcesz osiągnąć. Mam wielkie przeczucie, że próbujesz to zrobić w zły sposób.

0

@n0name_l
Mam sobie

List<SequenceListElement> sequence = new List<>();

oraz interfejs SeuqnceListElement który implementują klasy SequenceMove oraz SequenceDelay. Instancje tych dwóch klas mają być w kolejności wybranej przez użytkownika poukładane w liście sequence (Np 3xmove, delay, 2xmove, delay, 11xmove).

Teraz miałem problem z odtwarzaniem tych ruchów (program ma sterować ułożeniem pewnych elementów, a sekwencja ma mówić o tym jak i jak często ma się ono zmieniać) bo chciałem wyodbyć sobie SequenceListElement, sprawdzić czy jest z SequenceMove/Delay i zadziałać odpowiednio, tj.

  • Jeżeli SequenceMove: Rzutować na ten obiekt i wykonać ruch
  • Jeżeli SequenceDaley: Rzutować i wyciągnąć info o tym jak długo ma trwać opóźnienie.
2

To tak jak @n0name_l pisze - skoro już masz interfejs (powinien być raczej: ISequenceListElement, ale ogólnie nazwa trochę mało mówiąca), to po co rzutowanie?

http://en.wikipedia.org/wiki/Strategy_pattern

Nie wystarczy jakaś metoda Execute() w SequenceListElement?

0

@msm w sumie mogłoby być ale to nie obiekty mają coś ze sobą robić, tylko inna klasa (SequencePlayer) ma je sobie odczytać i zrobić rzeczy zależenie od informacji trzymanych w liście.

Ogólnie SequencePlayer sobie wyciąga te rzeczy z listy, rzutuje, i wykonuje ruchy i zmienia interval tak że Delay wchodzi w grę. Mógłbym w sumie zrobić Execute ale wtedy musiałbym przekazywać jakiegoś playera do obu klas.

Mógłbym wrzucić cały projekt gdzieś, bardzo bym chciał usłyszeć opinie, nie tyle o programie, tylko o kodzie i o tym czy dobre rozwiązania zastosowałem.

0

mógłbym w sumie zrobić Execute ale wtedy musiałbym przekazywać jakiegoś playera do obu klas.

No. Do tej metody przekazujesz obiekt, na którym ma się wykonać algorytm zenkapsulowany w konkretnej klasie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1