Hvorfor er det afgørende at bruge RemoveAt? Hvis du virkelig vil bruge RemoveAt så kan du jo søge i Listen indtil du når den du vil fjerne, notere indekset og så fyre en RemoveAt af.
List har metoden RemoveAll som er en ret elegant måde at løse dit problem på.
Alternativt kan du bruge Dictionary, men om det er smartere afhænger jo af den øvrige kode.
(Når jeg siger søge igennem, mener jeg enten en gammeldags for-løkke i stedet for en for each, eller hvis listen er sorteret passende, en BinarySearch)
Okay - men det skal heller ikke nødvendigvis være RemoveAt, jeg har kigget lidt på metoderne på MSDN, men jeg kunne ikke finde ud af hvilken en jeg skulle bruge samt hvordan jeg skal implementere den.
Jeg forestiller mig at kunne fjerne en række fra listen, ligesom hvis det var fra en database:
Hejsa, beklager det sene svar, men har været optaget af ting derude i virkeligheden.
Dit eksempel fra databasen er glimrende. Man kan (endnu) ikke dette, men det er på tegnebrættet (LINQ, som kommer med .NET 3.0), dvs syntaksen er lille smule anderledes. Men i 2.0 kan man næsten det samme- det udtrykkes bare anderledes. I dit eksempel er 'ID = 2' et prædikat: Det er en funktion der givet et Id returnerer true eller false. Det er samme tanke der ligger bag RemoveAll.
På msdn er der et VB.NET eksempel på hvordan man kan bruge RemoveAll metoden. Jeg kender ikke rigtigt VB.NET, men herunder er et C#-eksempel. (kræver der er en form med 1 knap på).
Men som sagt jeg ville klart bruge RemoveAll.
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms;
namespace WindowsApplication1 { public partial class Form1 : Form { public Form1 () { InitializeComponent (); }
private void button1_Click (object sender, EventArgs e) { // Lav liste og fyld den med stuff List<BrugerItem> _brugere = new List<BrugerItem> ();
_brugere.Add (new BrugerItem (2, "Foo")); _brugere.Add (new BrugerItem (1, "Bar")); _brugere.Add (new BrugerItem (2, "Baz")); _brugere.Add (new BrugerItem (5, "Jimbo")); _brugere.Add (new BrugerItem (6, "Hat")); _brugere.Add (new BrugerItem (2, "Whack"));
MessageBox.Show (_brugere.Count.ToString ());
// Fjern alle BrugerItem med Id = 2 ved at bruge filteret. _brugere.RemoveAll (new Predicate<BrugerItem> (Filtrer));
Det er super, alletiders. Jeg kigger lige på det og vender tilbage. - Skal lige have det til at virke i vb.net :-) - Men hvad, er .NET 3.0 allerede godt på vej, eller er det mig der spørger dumt?
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.