webForumDet fria alternativet

indexerare/typecast

.NET

3 svar · 360 visningar · startad av Han-Solo

Medlem sedan jan. 2001290 inlägg
Frågan#1

Jag har lessnat på att behöva typecasta helatiden

...skriver ofta klasser där jag behöver spara många object i "collections". Då använder jag gärna t.ex. en ArrayList som jag sparar mina object i. Problemet är då att den alltid returnerar datatypen 'object'.

Ah enkelt säger jag då... då ärver jag arraylisten i en egen class som döljer indexeraren this[int index] som returnerar ett object, med en indexerare som returnerar det typecast:ade objectet. MEN med override kan jag inte ändra returtyp. och med new kan jag dölja arraylistens orginal-indexerare. Det funkar att skriva som "det är tänkt" men studions Intellisense fattar det inte, då måste jag typecasta helatiden för att det ska bli rätt...

exempelkod:

public class myCollection : ArrayList
{
    public new this[int index]
    {
        get{return (myThing)base[index];}
    }
}

public struct myThing
{
    public string Name;
}

om jag mha exemplet ovan skriver

minCollection[0].Name;

så fattar compilatorn vad jag menar men inte studions Intellisense.

Vill jag att intellisense ska funka måste jag casta

((myThing)minCollection[0]).Name;

Finns det nått kul sätt att lösa detta i Framework 1.1

(har sett att det finns nått som hette.... eh... ah, som funkar som templates i C++, i Framework 2.0 som kommer att lösa detta problem, men som sagt, där är vi inte än.).

Medlem sedan juni 20008 205 inlägg
#2

Precis, det är generiska typer du vill ha. Nej, det finns inget bra sätt att lösa detta på. Kompilatorn tillåter som du märkt inte sådan överlagring som du vill göra. Du skulle kunna skriva en ny metod som har rätt returtyp, iofs, men det blir inte lika snyggt som med operatoröverlagring. Typ:

public class myCollection : ArrayList
{
    public myThing get(int index)
    {
        return (myThing) this[index];
    }
}

Eller nåt.

Medlem sedan jan. 2001290 inlägg
#3

darn... suck... pust... och stöön

Hur gör du/ni då? ...när ni ska spara en massa likformiga object?

typecaste:ar ni hela tiden???
...eller gör ni en såndär Get(int index) metod!?

Medlem sedan juni 20008 205 inlägg
#4

Han-Solo skrev:

typecaste:ar ni hela tiden???

Nej, jag använder Java och C++ som har generiska typer istället ;) Skämt åsido, det är bara att bita ihop och casta loss. Tänk glada tankar och kom ihåg att snart slipper du eländet. Att skapa egna klasser som ärver från olika collections är enligt mig för mycket jobb med för lite förtjänst, även om koden skulle bli snyggare.

256 ms totalt · 4 externa anrop · v20260731065814-full.2f471f9e
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)