Ich habe ein paar Fragen dazu gesehen, und recherchiert.ForEach Schleife nicht ändern Eigenschaft der Klasse
Mein Verständnis ist, dass wenn Sie eine foreach auf IEnumerable ausführen: wenn T ein Referenztyp (z. B. Klasse) ist, sollten Sie in der Lage sein, Eigenschaften des Objekts innerhalb der Schleife zu ändern. Wenn T ein Werttyp ist (z. B. Struct), würde dies nicht funktionieren, da die Iterationsvariable eine lokale Kopie wäre.
ich auf einem Windows Store App mit dem folgenden Code arbeite:
Meine Klasse:
public class WebResult
{
public string Id { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public string DisplayUrl { get; set; }
public string Url { get; set; }
public string TileColor
{
get
{
string[] colorArray = { "FFA200FF", "FFFF0097", "FF00ABA9", "FF8CBF26",
"FFA05000", "FFE671B8", "FFF09609", "FF1BA1E2", "FFE51400", "FF339933" };
Random random = new Random();
int num = random.Next(0, (colorArray.Length - 1));
return "#" + colorArray[num];
}
}
public string Keywords { get; set; }
}
Der Code:
IEnumerable<WebResult> results = from r in doc.Descendants(xmlnsm + "properties")
select new WebResult
{
Id = r.Element(xmlns + "ID").Value,
Title = r.Element(xmlns + "Title").Value,
Description = r.Element(xmlns +
"Description").Value,
DisplayUrl = r.Element(xmlns +
"DisplayUrl").Value,
Url = r.Element(xmlns + "Url").Value,
Keywords = "Setting the keywords here"
};
foreach (WebResult result in results)
{
result.Keywords = "These, are, my, keywords";
}
if (control is GridView)
{
(control as GridView).ItemsSource = results;
}
Sobald die Ergebnisse der "Keywords" erhalten angezeigt Eigenschaft ist "Hier die Schlüsselwörter setzen". Wenn ich einen Unterbrechungspunkt in der foreach-Schleife setze, kann ich sehen, dass das Ergebnisobjekt nicht geändert wird ...
Irgendwelche Ideen, was vor sich geht? Fehle ich gerade etwas Offensichtliches? Verändert sich IEnumerable in .NET für Windows Store Apps anders?
Wenn Sie Resharper zur Hand hatten, könnte die Warnung "Mögliche mehrfache Aufzählung von IEnumerable" ein Hinweis sein. Sie generieren für jede Aufzählung eine neue Sammlung. –
mögliches Duplikat von [Änderungen an einem IEnumerable werden nicht zwischen Abfragen beibehalten] (http://stackoverflow.com/questions/4083771/changes-to-an-ienumerable-are-not-being-kept-between-queries) – R0MANARMY