4

回避できると思われる長いイベントで複数回呼び出しているため、適応したい以下のコードがあります。

People= (from p in xDocument.Root.Descendants("People").Where(
                        se => Get<int>(se.Element("ID")) != i1)
          select new Person
              {
                 ID = Get<int>(se.Element("ID")),
                 Skills = GetPersonSkills(Get<int>(se.Element("ID")))
              }).OrderBy(w => w.FirstName).ToList()

アプリケーションに Get(se.Element("ID")) メソッドを再実行させる代わりに、単にSkills = GetPersonSkills(ID). 次に、それ自体の ID 値を読み取るだけです。

PS: ここに書いたコードは、実際の長いコードではなく、目的を示すために簡略化したものです。私の Get(se.Element("ID")) の例はアプリケーションにとって時間がかからないことを認識していますが、改善が必要なコードの部分を強調するだけでした。

4

3 に答える 3

2
People = xDocument.Root.Descendats("People")
    .Select(se => Get<int>(se.Element("ID")))
    .Where(id => id != i1)
    .Select(id => new Person
        {
            ID = id,
            Skills = GetPersonSkills(id)
        })
    .OrderBy(w => w.FirstName)
    .ToList()
于 2013-09-06T10:54:14.713 に答える
2

匿名型に保存します。

People= xDocument.Root.Descendants("People")
    .Select(se => new { ID=Get<int>(se.Element("ID")) })
    .Where(x => x.ID != i1)
    .Select(x => new Person
          {
             ID = x.ID,
             Skills = GetPersonSkills(x.ID)
          }
    ).OrderBy(w => w.FirstName)
    .ToList();
于 2013-09-06T10:54:40.817 に答える
1

Get<int>(se.Element("ID"))返されるものは何でもコンストラクターに渡しPerson、コンストラクターにそのプロパティIDSkillsプロパティを入力させることができます。

于 2013-09-06T10:53:18.100 に答える