0

我有一个有这个代码的类,

pCollection pub = RSSXmlDeserializer.GetPub(path, fReload);

get pub 是返回 pub 集合的方法...

我怎样才能迭代它们。我试过,

for (var n = 0; n < pub.Count; n++ ){

}

这是 getPub 方法

    public static PCollection GetPub(string path, bool fReload)
    {
        HttpApplicationState session = HttpContext.Current.Application;

        PCollection pub = session["PUB"] as PCollection;

        if pub == null || fReload)
        {
            StreamReader reader = null;

            try
            {
                XmlSerializer serializer = new XmlSerializer(typeof(PCollection));
                reader = new StreamReader(path);
                pub = (PCollection)serializer.Deserialize(reader);
                session["PUB"] = pub;
            }
            catch (Exception ex)
            {
                //throw ex;
            }
            finally
            {
                reader.Close();
            }
        }
        return pub;
    }


}


[Serializable()]
public class Pub
{
    [System.Xml.Serialization.XmlElement("title")]
    public string Title { get; set; }

    [System.Xml.Serialization.XmlElement("description")]
    public string Description { get; set; }

    [System.Xml.Serialization.XmlElement("imageUrl")]
    public string ImageUrl { get; set; }

}


[Serializable()]
[System.Xml.Serialization.XmlRoot("RPublications")]
public class PCollection
{
    [XmlArray("Pub")]
    [XmlArrayItem("Pub", typeof(Pub))]
    public Pub[] Pub { get; set; }
}

但“计数”不被识别。我收到此消息,pCollection 没有“计数”的定义...

我如何迭代集合 n 获取集合元素?请帮忙。

4

2 回答 2

3

你可以使用:

foreach(var p in pub.Pub)
{
     // Do work on p
}

请注意,您的PCollection类没有遵循良好的 .NET 实践,因为它被命名为“集合”,但没有实现任何集合的标准接口。您可能需要考虑将其重新设计为更加“标准化”。

于 2012-08-10T16:48:41.363 回答
2

PCollection并不是真正的收藏。它是一个包含集合(更准确地说是数组)的类。所以要迭代你需要迭代数组:

for (Int32 i = 0; i < pub.Pub.Length; ++i) {
  Pub p = pub.Pub[i];
  ...
}

或者,如果您不关心索引并且只想从头到尾浏览集合:

foreach (Pub p in pub.Pub) {
  ...
}

(更一致的类型和成员命名可能会有所帮助。)

于 2012-08-10T16:56:16.590 回答