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 には 'Count' の定義がありません...

コレクションを反復してコレクション要素を取得するにはどうすればよいですか? 助けてください。

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 に答える