IEnumerable C # Class How-to - PullRequest
       30

IEnumerable C # Class How-to

0 голосов
/ 20 марта 2012

Ниже мой класс. Мне нужно сделать это Enumerable. Я посмотрел онлайн, и хотя я нашел много документации, я все еще потерян. Я думаю, что это первый раз, когда я собираюсь спросить об этом, но может кто-нибудь, пожалуйста, просто сделайте эту чертову вещь Перечисляемой для меня, и я пойму это оттуда. Я использую 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 ]

1 голос
/ 26 июня 2014

Ну ... если все, что вам нужно, это чтобы кто-то "просто сделал эту чертову вещь перечисляемой", вот так ...

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
    }
}
0 голосов
/ 26 июля 2014

Я бы использовал класс без наследования:

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) ...
            }
        }
    }
}
0 голосов
/ 20 марта 2012

Чтобы быть перечислимым классом, необходимо реализовать некоторую коллекцию. Я не вижу ни одного свойства коллекции в вашем примере. Если вы хотите собрать коллекцию из профильных изображений, переименуйте свой класс в ProfiePic и используйте List.

Если вы хотите представить какое-либо свойство как коллекцию, сделайте его типом IEnumerable или List или другой коллекцией.

0 голосов
/ 20 марта 2012

Вопрос в том, что вы хотите перечислить?

Я полагаю, вы хотите какой-то контейнер, содержащий элементы вашего типа 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> в тех местах, где вам нужен контейнер.

Если вы его пропустили: вот документ MSDN дляthis IEnumerable (с некоторыми другими примерами)

...