webForumDet fria alternativet

Byta ut en ArrayList mot IList

.NET

5 svar · 731 visningar · startad av CatZ

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

Jag vill byta ut

public class Item
{
  string _name;
  ArrayList _subItems = new ArrayList();

  public Item(string name) { _name = name; }

  public string    Name     { get { return _name;     } }
  public ArrayList SubItems { get { return _subItems; } }
}

mot en IList istället

public class Item
{
	string _name;
	IList<Item> _subItems = new IList<Item>();

	public Item(string name) { _name = name; }

	public string Name { get { return _name; } }
	public IList<Item> SubItems { get { return _subItems; } }
}

men får ett meddelande om att

Visual Studio skrev:

Cannot create an instance of the abstract class or interface 'System.Collections.Generic.IList<Entities.Item>'

Vad gör jag för fel?

Medlem sedan jan. 20023 327 inlägg
#2

Du kan inte skapa en instans av ett interface.

Detta fungerar:

IList<Item> _subItems = new [3][B]List[/B][/3]<Item>();

Att du har IList på vänster sidan och inte på högersidan beror på att man bör sträva efter att programmera mot ett interface/abstraktion. Gör du det så kan du helt enkelt byta ut List mot en annan konkret klass som implementerar IList utan att behöva göra några ändringar i koden som jobbar mot interfacet. Exempelvis så skulle du kunna göra så här:

IList<Item> _subItems = new [3][B]MyOwnImplementationOfIList[/B][/3]<Item>();
Medlem sedan jan. 20022 440 inlägg
#3

gaaah ibland tittar man för länge på samma rad och blir blind!

Medlem sedan jan. 20023 327 inlägg
#4

CatZ skrev:

gaaah ibland tittar man för länge på samma rad och blir blind!

Ok då är nog min förklaring överflödig.

Medlem sedan jan. 20022 440 inlägg
#5

Compusa skrev:

Ok då är nog min förklaring överflödig.

Nej inte alls! Det hjälper ju alla som snubblar över tråden! ;)

Medlem sedan jan. 20023 327 inlägg
#6

Sant :)

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