operacje na iteratorze

0

Mam taką klasę z iteratorem:

class order : System.Collections.IEnumerable
    {
        int[] a = { 1, 5, 13, 15, 19 };

        public System.Collections.IEnumerator GetEnumerator()
        {
            foreach (int v in a)

                yield return v;
        }
    }

Teraz mogę iterować tak:

order o = new order();
foreach (int v in o)
{
     richTextBox1.AppendText("\n" + v.ToString());
}

Jak z obiektu "o" mogę wyciągnąć typ zwracanej przez enumerator wartości? Da się? W tym przykładzie jest to int. Jak go wyciągnąć z obiektu "o"?
Nie chcę pisać:

order o = new order();
foreach (var v in o)
{
     richTextBox1.AppendText("\n" + v.ToString());
}
1

jeśli wszystkie obiekty w iteratorze będą tego samego typu, to wcale nie trzeba „wyciągać typu”, bo można użyć generyków.

a jeśli mają być różnych typów na raz, i nie wiesz jakich, to coś mi się widzi że kombinujesz pod górkę, próbując wynaleźć dynamiczne typowanie.

Napisz więcej, co chcesz osiągnąć.

0

Mam teraz taką pętlę:

foreach (int v in o)
{
     richTextBox1.AppendText("\n" + v.ToString());
}

a zastanawia mnie czy da się zrobić żeby zamiast int było dynamiczne wyciąganie typu (może jakaś refleksja czy coś?)

foreach (o.getZwracanyPrzezIteratorTyp() v in o) // zamist int i var
{
     richTextBox1.AppendText("\n" + v.ToString());
}

Czy takie coś jest możliwe?

0

Jak nie wiesz jaki jest typ, to stosuj właśnie var o. Albo jak wiesz jaki jest typ to np. int o. Innej możliwości nie ma, zdaje się :) Jak chcesz się dowiedzieć jaki jest typ obiektu, to wyciągnij go za pomocą refleksji: o.GetType().

2

Ale po co ci to w ogóle? Przecież, jeżeli na etapie kompilacji nie będziesz wiedział jaki tam będzie typ to i tak nic ci to nie da - możesz tam równie dobrze wpisać "object v" zamiast "var v".

1
maszynaz napisał(a)

rozumiem, czyli wymyśliłem niemożliwy do zrobienia problem

Tak, wymyśliłeś sobie problem, który nie ma rozwiązania, bo nikt czegoś takiego nigdy nie próbował zrobić, gdyż nie ma to sensu.

1

Metoda .ToString() istnieje w każdej klasie. Żeby wyświetlać jakiś obiekt, nie musisz wcale znać jego typu.

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