Вернуть IEnumerable <dynamic>из метода - PullRequest
0 голосов
/ 15 июня 2011

Как я могу вернуть IEnumerable из метода.

 public IEnumerable<dynamic> GetMenuItems()
        {

            dynamic menuItems = new[]
                                    {
                                         new { Title="Home" },
                                    new { Title = "Categories"} 
                                    };

            return menuItems; 

        }

Приведенный выше код возвращает IEnumerable, но когда я использую его в представлении, он не распознает свойство Title.

@foreach(var item in @Model) 
{  
   <span>item.Title</span>
}  

Ответы [ 2 ]

9 голосов
/ 16 июня 2011

Не делай этого. .

Если вам нужно использовать результат анонимного типа вне метода, который его создает, пришло время определить конкретный тип.

class Foo 
{
    public string Bar { get; set; }
}

Если не делать этого, вы можете вернуть последовательность Tuple<> объектов.

Анонимные типы хороши, когда вы выполняете некоторую обработку внутри метода, вам нужна проекция данных, которая не соответствует вашему существующему графу объектов, и вам не нужно подвергать такую ​​проекциювнешний мир.Как только вы начнете проходить эту проекцию, продолжайте и выделите дополнительное время, чтобы определить правильный тип и воспользоваться его преимуществами.Будущее Ты будешь благодарен.

0 голосов
/ 20 июня 2011

Анонимные типы помечены как внутренние, поэтому вы не можете получить к ним доступ из другой сборки.Вместо этого вы можете использовать ExpandoObject, хотя встроенный синтаксис по умолчанию не работает, что может раздражать.Тем не менее, фреймворк с открытым исходным кодом impromptu-interface имеет синтаксис для , создавая его встроенным .

using ImpromptuInterface.Dynamic;
using System.Dynamic;
...
public IEnumerable<dynamic> GetMenuItems()
   {
       var @new = Builder.New<ExpandoObject>();

       dynamic menuItems = new[]{
                   @new.Object(Title:"Home"),
                   @new.Object(Title:"Categories")
                };

       return menuItems; 

   }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...