Problem mit foreach



  • Ich nehme der Einfachheit halber mal dieses Beispiel:

    public class Texture
    {
    	protected byte[] pixels;
    
    	public byte[] Pixels { get { return pixels; } set { pixels = value; }}
    
    	public Texture()
    	{
    		pixels = new byte[65536];
    	}
    }
    

    Will ich nun alle Pixel mehrerer Texturen aus einer Datei laden, wäre diese - funktionierende - Lösung naheliegend:

    foreach(Texture texture in textures)
    	texture.Pixels = br.ReadBytes(texture.Pixels.Length);
    

    Warum aber funktioniert Folgendes nicht?

    foreach(Texture texture in textures)
    	foreach(byte pixel in texture.Pixels)
    		pixel = br.ReadByte();
    

    MS Visual C# .NET 2003 Std. schrieb:

    Die Zuordnung zu 'pixel' ist nicht möglich, da sie schreibgeschützt ist.

    Wie bereits gesagt ist letztere Lösung in diesem Kontext nicht gerade sinnvoll, aber ich muss Teile einer anderen komplexeren Klasse auf diese Weise einlesen.



  • weil pixel nicht auf etwas refernziert sonder ein value ist und du im foreach kein value überschreiben kannst. Entweder du benutzt stattdessen eine for schleife oder dein zweites codebeispiel



  • Hm, danke. Aber wenn es daran liegt, dass es ein Werttyp ist, warum setzt C# an dieser Stelle dann kein boxing ein. Dann würde es sich doch um einen Verweistypen handeln. Oder habe ich was falsch verstanden?


Anmelden zum Antworten