3

我知道在 c# 4 或 4.5 中您可以创建匿名类型和动态类型,但我不确定它是如何工作的。我正在迭代一个共享点网站集,我想为每个子网站添加一个项目到列表中,有 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();
}
4

2 回答 2

2

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

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

这将起作用,但您将无法使用类似的属性,opportunityInfo[0].col1因为您已将该列表显式声明为List<object>. 如果您改为将其声明为List<dynamic>您将能够访问匿名类的成员。

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

于 2013-06-04T13:10:19.860 回答
1

匿名用户没有名字。

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

  opportunityInfo.Add(new  {
                            col1 = "value1",
                            col2 = "value2",
                            col3 = "value3"
                        });
于 2013-06-04T13:18:20.020 回答