Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Vrácení lsitu podle specifického typu

Aktivity
Avatar
Petr Nymsa
Tvůrce
Avatar
Petr Nymsa:13.6.2013 14:07

Ahoj, z generecitidou jsem nikdy moc nedělal a neívm jak přesně udělat následující metodu.

Mám třídu která má list GameObject. Do tohoto listu ale házím různé potomky - Tiles,Invento­ryItem,.....

Když použiju OfType<T>() vrátí to hledaný typ + případné potomky. Jak vrátit přímo daný typ ? Lze to přes LINQ nebo přes vlastní metodu ?

Díky ;)

Odpovědět
13.6.2013 14:07
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovídá na Petr Nymsa
Petr Nymsa:13.6.2013 14:14

Sorry za překlepy ! :D Máme sítě, tak nesleduju pořádně co a jak píšu

Nahoru Odpovědět
13.6.2013 14:14
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Odpovídá na Petr Nymsa
Luboš Běhounek Satik:13.6.2013 14:52

Použít můžeš obojí, v linq dotazu bys jen hledal takové záznamy, jejichž
.GetType() jsou shodné s typem, který chceš vytáhnout.

Nahoru Odpovědět
13.6.2013 14:52
https://www.facebook.com/peasantsandcastles/
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovídá na Luboš Běhounek Satik
Petr Nymsa:13.6.2013 14:57

Mohl by jsi napsat jak by vypadal vlastní metoda přes generecitidu ? Takto je něco málo špatně .. Díky :)

private List<T> ReturnType<T>()
       {

           var res = list.Where(x => x.GetType() == typeof(T));

           return res.ToList();
       }
Nahoru Odpovědět
13.6.2013 14:57
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Odpovídá na Petr Nymsa
Luboš Běhounek Satik:13.6.2013 15:46

Třeba takhle:

public static class ListExtension
{
    public static List<TOut> ReturnType<T, TOut>(this List<T> list)
    {
        return list.Where(x => x.GetType() == typeof(TOut)).OfType<TOut>().ToList<TOut>();
    }
}

a použití:

class Enemy : GameObject {...}

// list vsech objektu
List<GameObject> objekty = ...
...
// vrati z listu vsech objektu jen enemace
List<Enemy> nepratele = objekty.ReturnType<GameObject, Enemy>();
Editováno 13.6.2013 15:47
Nahoru Odpovědět
13.6.2013 15:46
https://www.facebook.com/peasantsandcastles/
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovídá na Luboš Běhounek Satik
Petr Nymsa:13.6.2013 18:39

Super ! :) Btw není T zbytečné ? Nestačí jenom TOut ?

Nahoru Odpovědět
13.6.2013 18:39
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Domiy
Neregistrovaný
Avatar
Odpovídá na Luboš Běhounek Satik
Domiy:13.6.2013 18:46

T se v LINQ používá střídměji - mnohem více IEnumerable. Proč tedy vracet List? (Pokud bude chtít aplikovat opět LINQ, bude zase přetypovávat.)

 
Nahoru Odpovědět
13.6.2013 18:46
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovídá na Luboš Běhounek Satik
Petr Nymsa:13.6.2013 18:47

Omlouvám se :) Ne je tam nutná :)

Nahoru Odpovědět
13.6.2013 18:47
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Odpovídá na
Luboš Běhounek Satik:13.6.2013 20:01

Puvodne jsem nad tim uvazoval, ze bych vracel jen IEnumerable, ale pak jsem si rek, ze kdyz chce list, budu vracet list, upravit si to uz muze podle potreb.

Nahoru Odpovědět
13.6.2013 20:01
https://www.facebook.com/peasantsandcastles/
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 9 zpráv z 9.