Ich fummel gerade mit C# rum, und da kam mir etwas seltsames über den Weg:
Ich habe folgenden Struct:
Code:
public struct MarkedPoint
{
public int X;
public int Y;
public bool Marked;
public MarkedPoint(int posX, int posY, bool marked)
{
X = posX;
Y = posY;
Marked = marked;
}
public MarkedPoint(int posX, int posY)
{
X = posX;
Y = posY;
Marked = false;
}
}
Und von diesem eine Liste "List<MarkedPoint>" in meiner Klasse als privates Feld. Innerhalb dieser Klasse gibt's so eine Methode:
Code:
private void DoSomething(ref List<MarkedPoint> e)
{
if (e.Count>2)
{
int i = 1;
do
{
if (eineBedingung) e[i].Marked = true;
i++;
} while (i<e.Count-1);
}
}
(Das ist natürlich ein auf die für die Frage essentiellen Teile herunter gebrochenes Codebröckchen
)
Diese rufe ich dann aus einer anderen Methode heraus auf, die den Parameter aus einer übergeordneten Liste "List<List<MarkedPoint>> MainList" via "DoSomething(ref MainList[k])" in einer Schleife über k übergibt.
Das Problem:
Bei der Zuweisung [i]"if (eineBedingung)
e.Marked = true;" meldet #Develop:
"Cannot modify the return value of 'System.Collections.Generic.List<Class1.MarkedPoin t>.this[int]' because it is not a variable (CS1612)"
Warum zum Henker?? Ändern des Parameters in "out" statt "ref" bringt das selbe Ergebnis. Ich komm nicht dahinter, und zudem brauch ich da sowas wie ne Lösung für
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)