如何从方法返回IEnumerable。
public IEnumerable<dynamic> GetMenuItems()
{
dynamic menuItems = new[]
{
new { Title="Home" },
new { Title = "Categories"}
};
return menuItems;
}
上面的代码返回IEnumerable,但是当我在View中使用它时,它无法识别Title属性。
@foreach(var item in @Model)
{
<span>item.Title</span>
}
答案 0 :(得分:9)
不要这样做。。
如果需要在创建它的方法之外使用匿名类型的结果,则可以定义具体类型。
class Foo
{
public string Bar { get; set; }
}
如果不这样做,您可以返回一系列Tuple<>
个对象。
当您在方法内部进行某些处理时,匿名类型很好,您需要投影不符合现有对象图的数据,并且您不需要向外界公开这样的投影。一旦你开始传递这个预测,继续前进并花费额外的时间来定义一个合适的类型并享受它的好处。未来你会感谢你。
答案 1 :(得分:0)
匿名类型标记为内部,因此您无法从其他程序集访问它们。您可以使用ExpandoObject,尽管默认创建语法不能内联工作,这可能很烦人。但是,开源框架impromptu-interface具有creating it inline的语法。
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;
}