.net 3.5 анонимный foreach - PullRequest
       18

.net 3.5 анонимный foreach

1 голос
/ 29 октября 2009

Я пытаюсь перебрать результаты функции, возвращающей анонимный объект результатов.

public static object getLogoNav()
{
  XDocument loaded = XDocument.Load(HttpContext.Current.Request.MapPath("~/App_Data/LOGO_NAV_LINKS.xml"));

  var query = from x in loaded.Elements().Elements()
              select new
              {
                 Name = x.FirstAttribute.Value,
                 Value = x.Value
              };

  return query;
}

код за страницей:

  var results = Common.getLogoNav();
  foreach(var nav in results) {
     string test = nav.Name;
  }

Ответы [ 2 ]

5 голосов
/ 29 октября 2009

Вы не можете иметь анонимный класс в качестве возвращаемого типа в C # 3 (и 4 в этом отношении), и вы не можете привести объект к анонимному типу. Ваши три варианта:

  • Выполнение цикла в рамках анонимного класса (в большинстве случаев это метод)
  • Приведение к объекту и использование отражения (медленно и не очень легко сделать, если вы не используете магию дерева выражений)
  • Преобразование в именованный класс и возвращение и экземпляр этого.
  • (в C # 4) вы можете создать магию динамического типа для достижения аналогичного эффекта, но это будет то же самое, что и вариант 2 с некоторым синтаксическим сахаром.
2 голосов
/ 29 октября 2009

Джон Скит написал запись о возвращении анонимного типа. Я надеюсь, что вы не используете его.

...