将数据添加到ArrayList

时间:2011-07-30 17:29:09

标签: c# .net xml 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; }
    }
}

现在,如何在系统中添加多个字符数据并在以后检索它们?

4 个答案:

答案 0 :(得分: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 :(得分: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 3.5开始从XML中提取数据的首选API,而且它也更简单。您可以按如下方式重写样本:

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

答案 2 :(得分:0)

你应该使用泛型:

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

在任何情况下(通用或当前非通用),您都可以使用

添加项目
returnArrayList.Add(cd);

答案 3 :(得分:0)

看起来您的对象具有ID,因此如果您需要通过ID访问,则Dictionary可能会更好。或者,如果每个CharData都显示在它自己的控件项中,例如gridrow,则可以将CharData对象链接到控件的.Tag属性。