2011-07-30 78 views
0

我有以下几点:将数据添加到一个ArrayList

// Begin the WebRequest to the desired RSS Feed 
WebRequest myRequest = WebRequest.Create(url); 
WebResponse myResponse = myRequest.GetResponse(); 

// Convert the RSS Feed into an XML document 
Stream rssStream = myResponse.GetResponseStream(); 
XmlDocument rssDoc = new XmlDocument(); 

rssDoc.Load(rssStream); 

// This uses an XPath expression to get all nodes that fall 
// under this path. 
XmlNodeList rssItems = rssDoc.GetElementsByTagName("row"); 
ArrayList returnArrayList = new ArrayList(); 

CharData cd = new CharData(); 
for (int i = 0; i < rssItems.Count; i++) 
{ 
    cd.CharacterName = rssItems[i].Attributes["name"].Value; 
    cd.CharacterID = rssItems[i].Attributes["characterID"].Value; 
    cd.CorporationID = rssItems[i].Attributes["corporationID"].Value; 
    cd.CorporationName = rssItems[i].Attributes["corporationName"].Value; 
} 
this.richTextBox1.Text = cd.CharacterName+"\r\n"+cd.CharacterID+"\r\n"+cd.CorporationID+"\r\n"+cd.CorporationName+"\r\n"; 

CharData类:

class CharData 
{ 
    private string _charName; 
    private string _charID; 
    private string _corporationID; 
    private string _corpName; 

    public string CharacterName 
    { 
     get { return _charName; } 
     set { _charName = value; } 
    } 
    public string CharacterID 
    { 
     get { return _charID; } 
     set { _charID = value; } 
    } 
    public string CorporationID 
    { 
     get { return _corporationID; } 
     set { _corporationID = value; } 
    } 
    public string CorporationName 
    { 
     get { return _corpName; } 
     set { _corpName = value; } 
    } 
} 

现在,我该如何添加多个字符数据的系统,并在以后找回它们?

+6

你的问题没有意义 - 也不清楚你为什么不使用非泛型集合。你坚持.NET 1.1吗? –

+0

您的问题是关于如何将CharData实例添加到returnArrayList列表? –

回答

1

在for循环中声明新的CharData,然后将其添加到数组中。像:

List<CharData> charDataList = new List<CharData>(); 

for (int i = 0; i < rssItems.Count; i++) 
{ 
    CharData cd = new CharData(); 

    cd.CharacterName = rssItems[i].Attributes["name"].Value; 
    cd.CharacterID = rssItems[i].Attributes["characterID"].Value; 
    cd.CorporationID = rssItems[i].Attributes["corporationID"].Value; 
    cd.CorporationName = rssItems[i].Attributes["corporationName"].Value; 

    charDataList.Add(cd); 
} 
1

首先,你不应该使用ArrayList时可能的,因为它不是类型安全的,并且只保持向后兼容性。从.NET 2.0开始,应该使用通用的List<T>

我相信你想这样做:

var returnItems = new List<CharData>(); 
foreach (var rssItem in rssItems) { 
    returnItems.Add(new CharData { 
     CharacterName = rssItem.Attributes["name"].Value, 
     CharacterID = rssItem.Attributes["characterID"].Value, 
     CorporationID = rssItem.Attributes["corporationID"].Value, 
     CorporationName = rssItem.Attributes["corporationName"].Value 
    }); 
} 

此外,LINQ to XML是因为用于.NET提取XML数据的首选API 3.5,它的简单,太。你可以重写你的样品如下:

var doc = XDocument.Load(rssStream); 
var returnItems = (from rssItem in doc.Descendants("row") 
        select new CharData { 
         CharacterName = rssItem.Attribute("name"), 
         CharacterID = rssItem.Attribute("characterID"), 
         CorporationID = rssItem.Attribute("corporationID"), 
         CorporationName = rssItem.Attribute("corporationName") 
        }).ToList(); 
0

你应该使用泛型:

System.Collection.Generic.List<CharData> returnArrayList = new System.Collection.Generic.List<CharData>(); 

在任何情况下(一般的或当前非通用),你可以使用添加项目

returnArrayList.Add(cd); 
0

它看起来像你的对象有一个ID,所以如果你需要通过ID访问字典可能会更好。或者,如果每个CharData都显示在它自己的控件项目(如Gridrow)中,则可以将CharData对象链接到控件的.Tag属性。