如何创建匿名对象列表

时间:2013-06-04 13:02:54

标签: c# asp.net gridview

我知道在c#4或4.5中你可以创建匿名类型和动态类型,但我不确定它是如何工作的。 我正在迭代一个sharepoint网站集,我想为每个子网站添加一个项目到列表,有3列

但是我不想为此创建一个类,因为它只针对这个方法。

private void RenderGrid()
{
    string currentUrl = SPContext.Current.Site.Url;
    List<object> listobject= new List<object>();

    SPSecurity.RunWithElevatedPrivileges(delegate()
    {
        using (SPSite clientSiteCollection = new SPSite(currentUrl))
        {
            foreach (SPWeb web in clientSiteCollection.AllWebs)
            {
                string webtemplate = web.Properties["WebTemplate"];

                if (webtemplate.Equals("xx"))
                {
                    SPList xx = web.Lists.TryGetList(Constants.Lists.xx);

                    if (opportunityInfoList != null)
                    {
                        opportunityInfo.Add(new object() {
                            col1 = "value1",
                            col2 = "value2",
                            col3 = "value3"
                        });
                    }
                }
            }
        }
    });

    lastCreatedOpportunitiesGrid.DataSource = opportunityInfo;
    lastCreatedOpportunitiesGrid.DataBind();
}

2 个答案:

答案 0 :(得分:2)

您可以通过在new声明中不提供特定类型来创建匿名类型:

opportunityInfo.Add(new {
    col1="value1",
    col2="value2",
    col3= "value3"});

这样可行,但您将无法使用opportunityInfo[0].col1之类的属性,因为您已将该列表明确声明为List<object>。如果您将其声明为List<dynamic>,则可以访问匿名类的成员。

(注意:我不确定数据绑定如何与匿名类型一起使用,或者List的类型是否会产生任何行为差异。)

答案 1 :(得分:1)

Anonymouse没有名字。

只需创建没有名称的新类,这将是您的匿名对象。

  opportunityInfo.Add(new  {
                            col1 = "value1",
                            col2 = "value2",
                            col3 = "value3"
                        });