为对象分配属性

时间:2014-03-03 21:30:58

标签: c# object reflection properties

好的,我有一小段代码可以根据数据模型创建一个对象列表。我不想为此创建课程。它在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属性存在,但是无法编码来获取值???

3 个答案:

答案 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;
    }