2016-10-03 2 views
0

Я в тупике. У меня есть класс конструктора, который выглядит примерно так:Добавление в класс конструктора

class CClasses 
{ 
    public class CCategoryGroup : List<CCategory> 
    { 
     public string CTitle { set; get; } 
     public string CShortTitle { set; get; } 
     public CARESCategoryGroup(string ctitle, string cshorttitle) 
     { 
      this.CTitle = ctitle; 
      this.CShortTitle = cshorttitle; 
     } 
    }; 

    public class CCategory 
    { 
     public int CID { set; get; } 
     public string CName { set; get; } 
     public ImageSource CIcon { set; get; } 
     public string CUrl { set; get; } 
     public CCategory(int cid, string cname, ImageSource cicon, string curl) 
     { 
      this.CID = cid; 
      this.CName = cname; 
      this.CIcon = cicon; 
      this.CUrl = curl; 
     } 
    }; 
} 

Я хочу добавить к конструктору части класса как так:

  //List<CCategoryGroup> ccategory = new List<CCategoryGroup> 
     //{ 
     // new CCategoryGroup("Dolphin", "Dolphin Group") 
     // { 
     //  new CCategory(1, "Bear", ImageSource.FromFile("bear.png")), 
     //  new CCategory(2, "Elephant", ImageSource.FromFile("elephant.png")), 
     //  new CCategory(3, "Dog", ImageSource.FromFile("dog.png")), 
     //  new CCategory(4, "Cat", ImageSource.FromFile("cat.png")), 
     //  new CCategory(5, "Squirrel", ImageSource.FromFile("squirrel.png")) 
     // }, 

Моя проблема в том, что я пытаюсь добавить к этому классу через петлю. Так что я легко может добавить CCategoryGroup с:

cCategory.Add(new CCategoryGroup(name, value) 

Как добавить в конструктор CCategory, как показано ранее?

foreach (XElement catelement in xmlDoc.Descendants(xmlNS + "Category")) 
     { 

      cCategory.Add(new CCategoryGroup(catelement.Element(xmlNS + "Name").Value, catelement.Element(xmlNS + "Name").Value){ 
       foreach (XElement subcatelement in xmlDoc.Descendants(xmlNS + "SubCategory")) 
       { 
        i++; 

        new CCategory(i, subcatelement.Element(xmlNS + "Name").Value, "", subcatelement.Element(xmlNS + "URL").Value); 
       } 
      }); 
     } 

Я разбираю XML и пытаюсь добавить результаты в класс. Очевидно, это не работает. Но это образец того, что я пытаюсь сделать. Первый «.add» для cCategoryGroup отлично работает, его конструктор CCategory, который я не могу добавить так же, как и в прокомментированном коде.

+0

Что бы вы могли скомпилировать, вы добавляете отсутствующий 4-й параметр в вызовы конструктора 'CCategory'. Вы ищете что-то другое или не работает для вас? –

+3

Также прекратите предварять все с помощью 'C'. Это упрощает чтение имен классов и параметров и не требует строго типизированного языка. –

+0

Да, я ищу, чтобы запустить его через петлю. Я знаю, что код с комментариями работает, но я в основном пытаюсь добавить к классу и конструктору, используя «.add». Как добавить к конструктору с помощью «.add»? –

ответ

0

Нет, вы не можете использовать цикл в коллекции инициализаторе, как это, но вы можете сделать это без инициализатора:

foreach (XElement catelement in xmlDoc.Descendants(xmlNS + "Category")) 
{ 

    CCategoryGroup categoryGroup = new CCategoryGroup(catelement.Element(xmlNS + "Name").Value, catelement.Element(xmlNS + "Name").Value; 
    cCategory.Add(categoryGroup); 

    foreach (XElement subcatelement in xmlDoc.Descendants(xmlNS + "SubCategory")) 
    { 
     i++; 
     categoryGroup.Add(new CCCategory(i, subcatelement.Element(xmlNS + "Name").Value, "", subcatelement.Element(xmlNS + "URL").Value)); 
    } 
} 

Обратите внимание, что инициализатор просто переводится на ряд Add вызовов по компилятор, поэтому функционально нет никакой разницы между этим и добавлением в цикле.

+0

Большое вам спасибо! –