2013-06-04 6 views
3

Я знаю, что в 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

Вы можете создать свой анонимный тип, не давая определенного типа в вашем new заявлении:

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

Это будет работать, но вы не сможете использовать свойства, как opportunityInfo[0].col1 потому, что вы» ve объявил этот список явно List<object>. Если вы объявите его как List<dynamic>, вы сможете получить доступ к членам анонимного класса.

. (Примечание: Я не уверен, экспромтом, как связывание данных будут работать с анонимным типом, или типа List будет делать какие-либо поведенческие различия)

+0

после этого, я могу использовать boundColumn в gridview? –

+0

Как я уже сказал, я не уверен. Вам придется попробовать это для себя! –

+0

он говорит Тип Ожидаемый в первой открывающей скобке –

1

Anonymouse не имеет названия.

просто создайте новый класс без имени, и это будет ваш анонимный объект.

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

это не скомпилировано. вы не включаете parens после 'new' при создании анонимных объектов. когда вы их включаете, компилятор ожидает, что вы также укажете тип. –

+0

это был просто опечаток. – JSJ

Смежные вопросы