Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从方法返回IEnumerable_C#_Asp.net Mvc_C# 4.0 - Fatal编程技术网

C# 从方法返回IEnumerable

C# 从方法返回IEnumerable,c#,asp.net-mvc,c#-4.0,C#,Asp.net Mvc,C# 4.0,如何从方法返回IEnumerable public IEnumerable<dynamic> GetMenuItems() { dynamic menuItems = new[] { new { Title="Home" },

如何从方法返回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>
}  
不要这样做

如果您需要在创建匿名类型的方法之外使用该匿名类型的结果,那么是时候定义一个具体类型了

class Foo 
{
    public string Bar { get; set; }
}
如果不这样做,您可以返回一个元组对象序列


当您在方法内部执行某些处理时,匿名类型很好,您需要一个不符合现有对象图的数据投影,并且不需要将这样的投影公开给外部世界。一旦你开始传递这个投影,就开始吧,花额外的时间定义一个合适的类型并享受它的好处。将来您会感谢您。

匿名类型被标记为内部,因此您无法从其他程序集访问它们。您可以使用ExpandoObject,尽管默认的创建语法不能内联工作,这可能会很烦人。但是,开源框架有一个用于的语法


只是好奇。为什么菜单必须是动态的?我知道一些原因,但我很好奇为什么会出现在你的应用程序中。他使用dynamic是为了在当前方法之外显示匿名类型。这是一种巨大的代码气味,应始终避免。只需创建一个适当的类型。我可以创建一个表示菜单的菜单类,但对于我的应用程序,菜单项固定为5,因此我不想执行额外的工作来为菜单创建单独的类。然后只需使用元组而不是匿名类型,您的问题就得到了解决。尝试使其工作,包括在上发布时间,这样可以解决问题比实现一个合适的类型花费更多的时间。一个合适的类型也会给你的模板。还有一些内置类型,如Tuple、KeyValuePair string、url,我猜它们在这种情况下可以很好地使用。这是否意味着我无法访问当前方法之外的匿名类型属性?@john,有些黑客可以让你这样做。那可不是什么好主意!构建一个只封装数据的类并不需要很长时间,继续并花费时间来完成。当您需要在应用程序中传递数据时,您确实需要继续创建一个自文档化、封装的数据类型。@AnthonyPegram那么您所说的hack是什么呢?愿意分享吗?我真的很想知道你会想出什么主意
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; 

   }