---
title: "Lägga till fler värden i string[]?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/167236-lägga-till-fler-värden-i-string"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "inspiro"
published: "2007-12-13T14:50:39.000Z"
updated: "2007-12-18T20:30:11.000Z"
replies: 13
views: 976
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/dotnet/167236-lägga-till-fler-värden-i-string"
---

# Lägga till fler värden i string[]?

## #1 — inspiro, 2007-12-13T14:50Z

Har en array som jag fyller så här:

```
String[] s = Str.Split(new Char[] {' '});
```

Så långt allt väl. Men hur gör jag för att efteråt lägga till ytterligare ett eller flera värden? Skulle vilja ha s.Add eller nåt men det finns ju inte...

Permalänk: https://www.webforum.nu/p/167236

## #2 — Zaiman, 2007-12-13T15:05Z

Titta på Stringbuilder istället för array.

Permalänk: https://www.webforum.nu/p/2060888

## #3 — SPiN, 2007-12-13T15:07Z

```
s[s.Length()] = new String("Sista element");
```

Eller så skapar du helt enkelt en ArrayList av din array;

```
ArrayList al = ArrayList.Adapter(s);
al.Add(new String("Sista elementet"));
```

Permalänk: https://www.webforum.nu/p/2060889

## #4 — Compusa, 2007-12-13T15:50Z

> ```
> ArrayList al = ArrayList.Adapter(s);
> al.Add(new String("Sista elementet"));
> ```

Ännu heller så här i så fall:

```
IList<string> list = new List<string>(s);
list.Add("en sträng");
```

Även StringBuilder som Zaiman tipsade om kan fungera bra, men det beror lite på vad det är du ska göra.

```
StringBuilder message = new StringBuilder();
message.Append("en sträng");
message.Append("en annan sträng");
```

Syftet med StringBuilder är att effektivisera sträng-kontaktinering. Dvs bygga ihop ett långt stringobjekt på ett effektiv sätt.

Permalänk: https://www.webforum.nu/p/2060899

## #5 — inspiro, 2007-12-13T16:26Z

Aha, tack! Jag gjorde en arraylist, fungerar bra! Varför är List\<string\> bättre och vad är det för något egentligen?

Stringbuilder, är det en array? Jag behöver ha direktåtkomst till varje element i listan.

Permalänk: https://www.webforum.nu/p/2060912

## #6 — CatZ, 2007-12-13T16:41Z

Det är lättare att arbeta med object.value i en IList än i en array. Dessutom är IListen mer flexibel än en Array. Du kan givetvis ha en ArrayList som är ungefär samma sak som en IList men du har fortfarande lite svårare med dina objekt värden.

Permalänk: https://www.webforum.nu/p/2060917

## #7 — inspiro, 2007-12-13T17:18Z

Kan ni ge något exempel på vilket sätt det är lättare? Menar du om man sparar ned objekt i listan istället för rena värden så är det enklare att hantera objekten? Är IList en collection men inte en array (om jag fattat det rätt så är en array en lista med värden medan en collection är en lista med objekt)?

Vad betyder I framför IList (har sett att man ofta skriver ett I framför en del klasser)?

Permalänk: https://www.webforum.nu/p/2060925

## #8 — CatZ, 2007-12-13T17:52Z

IEt står för Interface. Det är som en array fast du har både objektet och värdet i arrayen kan man säga. Du kan komma åt både objektet och värdet på lite olika sätt.

Rekommenderar **/red. fel länk** http://msdn2.microsoft.com/en-us/library/5y536ey6(VS.90).aspx om du vill läsa på lite.

Permalänk: https://www.webforum.nu/p/2060929

## #9 — Compusa, 2007-12-13T19:32Z

> **inspiro skrev:**
>
> Aha, tack! Jag gjorde en arraylist, fungerar bra! Varför är List\<string\> bättre och vad är det för något egentligen?

List\<T\> (IList\<T\>) är en generic och motsvarar en ArrayList. Fördelarna med generics är många. En generic-lista är typsäker, dvs försöker du stoppa in andra objekt än vad du definerat T som (string i mitt exempel) så får du kompileringsfel. Med en vanlig ArrayList upptäcks sådana fel först vid runtime. Vidare så är det bättre prestanda med en generic-lista eftersom du inte behöver köra explicita\\implicita "castningar" när läser från\\skriver till din lista. Det tillhör god praktiskt att använda generiska samlingar istället för de gamla samlingarna i namespacet System.Collections.

Inte övertygad? Skaparen av C# förklarar det välidgt bra:
[Anders Hejlsberg - What's so great about generics?](http://channel9.msdn.com/showpost.aspx?postid=10189)

Permalänk: https://www.webforum.nu/p/2060954

## #10 — inspiro, 2007-12-14T07:00Z

Aha, ok tack, då förstår jag bättre! Några fler funderingar... eftersom IList är ett interface, måste man då inte implementera de metoder som ska finnas med i interfacet för att kunna använda IList? För om jag förstått det rätt så är ett interface en slags ram för vad som måste finnas med för att interfacet ska kunna användas?

Och varför skriver man så här:
IList\<string\> list = new List\<string\>(s);

...och inte så här:
IList\<string\> list = new **I**List\<string\>(s);

Vad är s?

Permalänk: https://www.webforum.nu/p/2061012

## #11 — Gladh, 2007-12-14T08:39Z

> **inspiro skrev:**
>
> eftersom IList är ett interface, måste man då inte implementera de metoder som ska finnas med i interfacet för att kunna använda IList? För om jag förstått det rätt så är ett interface en slags ram för vad som måste finnas med för att interfacet ska kunna användas?

Jo det stämmer, ett interface är ett "tom skal" som berättar hur skalet ser ut, men ingeting om vad som händer innan för skalet. Och skulle du skapa en egen Listklass som implementerade IList\<\> interfacet så skulle du behöva skiva allting själv, men det behöver du inte eftersom List\<\> är classen som implementerar IList\<\>.

> **inspiro skrev:**
>
> IList\<string\> list = new List\<string\>(s);
> 
> ...och inte så här:
> IList\<string\> list = new IList\<string\>(s);

Du kan inte skriva den understa raden eftersom du inte kan skapa instanser av interface, du måste skapa en instans av någon klass som har implementerat interfacet. Om du skulle lyckas med den understa raden, så skulle ingenting hända när du gör något med din list, eftersom ingen logik finns implementerad i IList\<\> bara vad metoderna skall heta, inte vad de gör.

> **inspiro skrev:**
>
> Vad är s?

Antagligen en Enumeration av något slag, typ en annan lista med strängar. Oftas så brukar man inte skicka med något till listor för när man börjar använda dem så brukar de vara tomma och då skriver man

```
IList<string> list = new List<>();
eller
List<string> list = new List<>();
```

\- M

Permalänk: https://www.webforum.nu/p/2061020

## #12 — Compusa, 2007-12-14T09:02Z

> **inspiro skrev:**
>
> Aha, ok tack, då förstår jag bättre! Några fler funderingar... eftersom IList är ett interface, måste man då inte implementera de metoder som ska finnas med i interfacet för att kunna använda IList? För om jag förstått det rätt så är ett interface en slags ram för vad som måste finnas med för att interfacet ska kunna användas?
> 
> Och varför skriver man så här:
> IList\<string\> list = new List\<string\>(s);
> 
> ...och inte så här:
> IList\<string\> list = new **I**List\<string\>(s);
> 
> Vad är s?

Se Interface som ett kontrakt. IList är ett kontrakt som definierar vilka metoder som måste implementeras. IList innehåller ingen implementation utan bara metodsignaturerer etc. List är en klass som implementerar interface IList. Det vill säga, List innehåller implementationen av de metoder som defineras av interfacet IList.

> **inspiro skrev:**
>
> Aha, ok tack, då förstår jag bättre! Några fler funderingar... eftersom IList är ett interface, måste man då inte implementera de metoder som ska finnas med i interfacet för att kunna använda IList?

List är en implementation av IList som finns med i .NET-ramverket (System.Collections.Generic). Ibland kan man vilja ha en egen implementation av IList men List duger till det mesta.

> **inspiro skrev:**
>
> Och varför skriver man så här:
> IList\<string\> list = new List\<string\>(s);
> 
> ...och inte så här:
> IList\<string\> list = new **I**List\<string\>(s);
> 
> Vad är s?

Du kan inte skriva "new IList()" eftersom IList är ett interface, dvs du kan inte skapa en instans av ett interface eftersom den inte innehåller någon implementation.

Båda dessa sätt fungerar däremot:

```
List<string> list = new List<string>(s);
IList<string> list = new List<string>(s);
```

Det är dock en viss skillnad mellan dessa två. Den första kan läsas som:
"Skapa ett nytt objekt av typen List"

medans den andra kan läsas som:
"Skapa ett nytt objekt av typen IList".

Skillnaden är den att om du skapar ett objekt av typen IList så kommer du bara åt de metoder som finns i interfacet IList. Säg att du gjort din egna klass som implementerat IList och även innehåller metoder som inte finns med i interface. Skriver du då såhär:

```
IList<string> list = new MyList<string>();
```

Så kommer du bara åt de metoder som finns i interfacet IList, detta fenomen brukar kallas "slicing", dvs allt som inte finns med i interfacet IList "klipps" bort. Gör du istället så här:

```
MyList<string> list = new MyList<string>();
```

Så kommer du åt allt som finns i din klass MyList. Är det möjligt så ska man dock försöka sträva efter att programmera mot ett interface.

> **inspiro skrev:**
>
> Vad är s?

s är din array som du postade i ditt första inlägg. Du behöver inte ha med det i konstruktorn. Det var bara ett exempel på hur du kan fylla din lista med värden vid initiering från en annan datastruktur som implementerar IEnumerabel.

/r Gladh var snabbare :)

Permalänk: https://www.webforum.nu/p/2061026

## #13 — inspiro, 2007-12-14T15:19Z

Toppenfin förklaring, nu vet jag mycket bättre. Tack för hjälpen!   :bire

Permalänk: https://www.webforum.nu/p/2061110

## #14 — inspiro, 2007-12-18T20:30Z

Lånar den här tråden till en ny fråga på samma tema. Jag har 12 asp.image som jag skulle vilja lägga in i en array av något slag för att göra det enklare att jobba med dem. Vilken typ av array ska man använda för objekt och hur gör man?

Permalänk: https://www.webforum.nu/p/2061961

---

Tråden på webben: https://www.webforum.nu/amne/dotnet/167236-lägga-till-fler-värden-i-string
