好的,我有一小段代码可以根据数据模型创建一个对象列表。我不想为此创建课程。它在n ASP.net MVC应用程序上用于填充用户通知列表。
我知道有很多其他方法可以做到这一点,例如实际为它设置一个类(可能是最简单的方法),但我想知道是否有办法做下面显示的内容。
List<object> notificationList = new List<object>();
object userNotification = new { Text = "Here is some text!", Url = "http://www.google.com/#q=notifications" };
notificationList.Add(userNotification);
foreach(object notification in notificationList)
{
string value = notification.Text;
}
所以我还没有填充这个列表,但为了达到这个目的,你得到了这个想法。调试后我注意到Text和Url属性存在,但是无法编码来获取值???
答案 0 :(得分:3)
您需要在foreach中使用dynamic
作为变量类型:
foreach(dynamic notification in notificationList)
{
string value = notification.Text;
}
答案 1 :(得分:2)
编辑糟糕...你需要“动态”,无论是作为List的泛型类型,还是在foreach中。
var notificationList = new List<dynamic>();
var userNotification = new { Text = "Here is some text!", Url = "http://www.google.com/#q=notifications" };
notificationList.Add(userNotification);
foreach (var notification in notificationList)
{
string value = notification.Text;
}
结束修改
应使用var
关键字声明匿名类型:
var userNotification = new { Text = "Here is some text!", Url = "http://www.google.com/#q=notifications" };
您也可以使用“dynamic”而不是“var”,但这会使您失去编译时检查,在这种情况下似乎没有必要(因为类型在编译时完全定义,在同一方法范围内) 。您 需要使用“dynamic”的情况是您希望将匿名类型对象作为参数传递给另一个函数,例如:
void Func1()
{
var userNotification = new { Text = "Here is some text!", Url = "http://www.google.com/#q=notifications" };
Func2(userNotification);
}
void Func2(dynamic userNotification)
{
string value = notification.Text;
}
答案 2 :(得分:0)
你可以将列表声明为dynimac
个对象的列表:
List<dynamic> notificationList = new List<object>();
var userNotification = new { Text = "Here is some text!", Url = "http://www.google.com/#q=notifications" };
notificationList.Add(userNotification);
foreach(dynamic notification in notificationList)
{
string value = notification.Text;
}
或使用var
让编译器选择类型:
var notificationList = new []
{
new { Text = "Here is some text!", Url = "http://www.google.com/#q=notifications" }
}.ToList();
foreach(var notification in notificationList)
{
string value = notification.Text;
}