class TestClass
{
public int id;
public TestClass(int id)
{
this.id = id;
}
}
namespace Blaa
{
class Program
{
public static List<TestClass> tests = new List<TestClass>();
static void Main(string[] args)
{
tests.Add(new TestClass(1));
tests.Add(new TestClass(2));
tests.Add(new TestClass(3));
foreach (TestClass t in tests)
{
if (t.id == 2)
tests.Remove(t);
}
Console.Read();
}
}
}Eli millä kikalla onnistuisi poistamaan listasta alkion loopissa, ylläoleva kun rysäyttää ohjelman?
Voit käyttää tavallista for-silmukkaa.
for (int i = 0; i < tests.Count;) {
if (tests[i].id == 2) {
tests.RemoveAt(i);
} else {
++i;
}
}Takaperin koodista tulee yksinkertaisempi.
for (int i = tests.Count - 1; i >= 0; --i) {
if (tests[i].id == 2) {
tests.RemoveAt(i);
}
}Lyhyempi vaihtoehto on LINQ.
tests.RemoveAll(t => t.id == 2);
Tuossa vähän selostusta vanhasta topicista, kielenä kylläkin vb.net mutta idea selviää: https://www.ohjelmointiputka.net/keskustelu/
Ei koodissasikaan kyllä varsinaista vikaa ole, jos olet includannut Genericsit mukaan. (tuo list<T> ei ole vakiona includattuna. Voit käyttää myös System.Collections.Generic.List<T>)
groovyb kirjoitti:
Ei koodissasikaan kyllä varsinaista vikaa ole,
Onpa. Listaa ei voi muokata kesken foreach-silmukan.
Mikäköhän lukihäiriö on iskenyt tuota koodia katsellessa.
tämä foreach toimii:
tests.ForEach(delegate(TestClass t)
{
if(t.id == 2)
tests.Remove(t);
});Aihe on jo aika vanha, joten et voi enää vastata siihen.