asp.net 在.net中迭代集合

8ehkhllq  于 2023-08-08  发布在  .NET
关注(0)|答案(2)|浏览(109)

我有一个类有这样的代码

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


但是“Count”不被识别。我收到此消息,pCollection没有'Count'的定义...
我如何迭代集合n得到集合元素?

tez616oj

tez616oj1#

您可以用途:

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

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

8e2ybdfx

8e2ybdfx2#

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

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

字符串
或者,如果你不关心索引,只想从头到尾浏览一遍集合:

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


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

相关问题