Вопрос

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

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;
  }
Это было полезно?

Решение

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

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top