IEnumerable C#类操作方法

时间:2012-03-20 05:31:18

标签: c# c#-4.0 ienumerable ienumerator

以下是我的课程。我需要让它成为可枚举的。我在网上看过,虽然我找到了很多文件,但我仍然迷失了。我认为这绝对是我第一次问这个问题,但是有人可以让这个令人难以置信的东西对我而言我会从那里弄明白。 我正在使用C#ASP.Net 4.0

    public class ProfilePics
{
    public string status { get; set; }
    public string filename { get; set; }
    public bool mainpic { get; set; }
    public string fullurl { get; set; }

}

4 个答案:

答案 0 :(得分:1)

嗯......如果你想要的只是为了“让这个可怜的东西变得难以置信”,这就是......

public class ProfilePics : System.Collections.IEnumerable
{
    public string status { get; set; }
    public string filename { get; set; }
    public bool mainpic { get; set; }
    public string fullurl { get; set; }

    System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
    {
        yield break;
    }
}

它不会枚举任何内容,但它是可枚举的。

现在我会尝试一些心灵阅读,并想知道你是否想要这样的事情:

public class ProfilePicture
{
    public string Filename { get; set; }
}

public class ProfilePics : IEnumerable<ProfilePicture>
{
    public List<ProfilePicture> Pictures = new List<ProfilePictures>();

    public IEnumerator<ProfilePicture> GetEnumerator()
    {
        foreach (var pic in Pictures)
            yield return pic;
        // or simply "return Pictures.GetEnumerator();" but the above should
        // hopefully be clearer
    }
}

答案 1 :(得分:0)

问题是:你想要枚举什么?

我想你想要某种容器,包含ProfilePics类型的项目,所以请选择

List<ProfilePics>

在这样的类中:

public class ProfilePic
{
    public string status { get; set; }
    public string filename { get; set; }
    public bool mainpic { get; set; }
    public string fullurl { get; set; }

}

public class ProfilePics : IEnumerable<ProfilePic>
{
    private pics = new List<ProfilePic>();

    // ... implement the IEnumerable members
}

或者只是在那些需要容器的地方明白地使用List<ProfilePics>

万一你错过了它:这是这个IEnumerable的MSDN文档(还有一些例子)

答案 2 :(得分:0)

要成为可枚举的类应该实现一些集合。我的示例中没有看到任何集合属性。如果您想收集个人资料照片的集合,请将您的课程重命名为'ProfiePic'并使用列表。

如果要将某些属性公开为集合,请将其设置为IEnumerable或List或其他集合。

答案 3 :(得分:0)

我会使用没有继承的类:

using System;
using System.Collections.Generic;

namespace EnumerableClass
{
    public class ProfilePics
    {
        public string status { get; set; }
        public string filename { get; set; }
        public bool mainpic { get; set; }
        public string fullurl { get; set; }

        public IEnumerator<object> GetEnumerator()
        {
            yield return status;
            yield return filename;
            yield return mainpic;
            yield return fullurl;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            ProfilePics pic = new ProfilePics() { filename = "04D2", fullurl = "http://demo.com/04D2", mainpic = false, status = "ok" };
            foreach (object item in pic)
            {
                Console.WriteLine(item);
                //if (item is string) ...
                //else if (item is bool) ...
            }
        }
    }
}