我有以下内容:
// 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; }
}
}
现在,如何在系统中添加多个字符数据并在以后检索它们?
答案 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属性。