私はこれに関するいくつかの質問を見て、いくつかの調査を行いました。For Eachループはクラスのプロパティを変更していません
IEnumerableでforeachを実行すると、Tが参照型(たとえばクラス)である場合、ループ内からオブジェクトのプロパティを変更できるはずです。 Tが値型(Structなど)の場合、反復変数はローカルコピーであるため、これは機能しません。
私のクラス:
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; }
}
コード:
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;
}
結果が "キーワード" を表示し得れば、私は次のコードでWindowsストアアプリに取り組んでいます
プロパティは "ここにキーワードを設定する"です。 foreachループにブレークポイントを置くと、結果オブジェクトが変更されていないことがわかります...
何が起こっているかについてのアイデアはありますか?明白な何かが欠落していますか? IEnumerableはWindowsストアアプリケーションの.NETでは異なる動作をしますか?
Resharperが手元にある場合は、「可能な複数のIEnumerableの列挙」という警告がヒントになることがあります。列挙ごとに新しいコレクションを生成しています。 –
[[IEnumerableの変更はクエリ間で保持されていません]]の重複可能性があります(http://stackoverflow.com/questions/4083771/changes-to-an-ienumerable-are-being-kept-between-queries) – R0MANARMY