Выбор случайных изображений и их отображение в соответствии с классом Specifi c - PullRequest
1 голос
/ 20 апреля 2020

Я новичок в OOP и работаю над заданием, в котором у меня есть данные о примерно 30 изображениях, которые хранятся в папке и считываются из нее в моем приложении. Изображения состоят из Овощей , Фруктов , Напитков и Бумаг .

Я читаю это в классе как следующее:

class Objects
{        
    private List<Image> images = new List<Image>();

    Image newspaper = Image.FromFile(@"C:\Users\User\Downloads\1.jpg");
    Image tomatoes = Image.FromFile(@"C:\Users\User\Downloads\2.jpg");
    //  More file paths like these .....

    public Image ReturnImages()
    {
        images.Add(newspaper);
        images.Add(tomatoes); 
        // All images added to the list like this ...

        Random random = new Random();           
        return images[random.Next(0, images.Count - 1)]; //returns a random image
    }
}

Как я могу определить, что возвращаемое изображение является Овощом, Фруктом, Газетой или Напитком, поскольку случайное изображение будет возвращено из Списка? В этом случае идентификация возвращенного изображения поможет мне вызвать методы указанного класса c, т. Е. Овощей, фруктов, бумаги и напитков в соответствии с типом возвращаемого изображения.

Ответы [ 2 ]

2 голосов
/ 20 апреля 2020

Простое присвоение различных имен переменным не помогает определить вид изображения после сохранения ссылки на изображение в списке. Вам нужен специализированный класс с двумя свойствами. kind (перечисление с различными типами изображений) и imgData типа Image

public class ImageInfo
{
    public ImageKind kind {get;set;}
    public Image imgData {get;set;}
}
public enum ImageKind
{
    Vegetables = 0,
    Fruits,
    Drinks,
    Papers,
}
public class Objects
{        
    private List<ImageInfo> images = new List<ImageInfo>();

    ImageInfo newspaper = new ImageInfo {kind = ImageKind.Papers, imgData = Image.FromFile(@"C:\Users\User\Downloads\1.jpg")};
    ImageInfo tomatoes = new ImageInfo{ kind = ImageKind.Vegetables, imgData = Image.FromFile(@"C:\Users\User\Downloads\2.jpg")};
    //  More file paths like these .....

    public ImageInfo ReturnImages()
    {
        images.Add(newspaper);
        images.Add(tomatoes); 
        // All images added to the list like this ...

        Random random = new Random();           
        return images[random.Next(0, images.Count - 1)]; //returns a random image
    }
}
0 голосов
/ 20 апреля 2020

Вы можете использовать кортеж, чтобы сделать это, сначала я сделал бы перечисление

enum ImageType {
    Newspaper,
    Vegetable,
    Etc..
}

, затем вы бы использовали кортеж

private List<Tuple<ImageType, Image>> images = new List<Tuple<ImageType, Image>>();

Ваша функция должна выглядеть следующим образом

private static random = new Random()

public Tuple<ImageType, Image> ReturnImages()
{
    images.Add(new Tuple<ImageType, Image>(ImageType.Newspaper, newspaper));
    images.Add(new Tuple<ImageType, Image>(ImageType.Vegetable, tomatoes)); 
    // All images added to the list like this ...

    return images[random.Next(0, images.Count - 1)]; //returns a random image
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...