2016-10-03 8 views
0

Ich bin ratlos. Ich habe einen Konstruktor Klasse, die wie so aussieht:Hinzufügen zu einer Konstruktorklasse

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

Ich möchte wie so an den Konstruktor Teil der Klasse hinzuzufügen:

  //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")) 
     // }, 

Mein Problem ist, ich versuche zu dieser Klasse hinzufügen durch eine Schleife. So bin ich einfach in der Lage, die CCategoryGroup mit hinzuzufügen:

cCategory.Add(new CCategoryGroup(name, value) 

Wie kann ich mit dem CCategory Konstruktor hinzufügen, wie zuvor gezeigt?

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); 
       } 
      }); 
     } 

Ich analysiere XML und versuche, die Ergebnisse der Klasse hinzuzufügen. Das funktioniert natürlich nicht. Aber ist eine Probe von dem, was ich versuche zu tun. Das erste ".add" zu cCategoryGroup funktioniert großartig, es ist der Konstruktor CCategory, den ich nicht so hinzufügen kann, wie ich es in dem auskommentierten Code getan habe.

+0

Was Sie kompilieren müssten, ist das Hinzufügen des fehlenden 4. Parameters zu den Konstruktoraufrufen 'CCategory'. Suchst du etwas anderes oder funktioniert es nicht für dich? –

+3

Hören Sie auch auf, alles mit 'C' voranzutreiben. Es erschwert das Lesen der Klassen- und Parameternamen und ist in einer stark typisierten Sprache nicht erforderlich. –

+0

Ja, ich möchte es durch eine Schleife laufen lassen. Ich weiß, dass der auskommentierte Code funktioniert, aber ich versuche grundsätzlich, eine Klasse und den Konstruktor mit ".add" hinzuzufügen. Wie füge ich dem Konstruktor mit ".add" hinzu? –

Antwort

0

Nein, man kann nicht eine Schleife in der Auflistungsinitialisierer so verwenden, aber man kann es ohne initializer tun:

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)); 
    } 
} 

Beachten Sie, dass ein initializer nur auf eine Reihe von Add Anrufe übersetzt wird durch der Compiler, so funktional gibt es keinen Unterschied zwischen dem Hinzufügen und in einer Schleife.

+0

Vielen Dank! –

Verwandte Themen