Foreach () с операторами if, не влияющими на переменные - PullRequest
0 голосов
/ 15 апреля 2019

Я пытаюсь добавить InventoryState к различным продуктам, расширенным из моего интерфейса IProduct, который я создал ранее, но оператор foreach (), который я сделал для проверки состояния инвентаря, не изменяет значение по умолчанию Unassigned для свойства. ..

Это свойства для каждого объекта продукта:

    public string ProductType
        {
            get { return "Apple"; }
            set { }
        }

        public double BulkPrice
        {
            get { return 0.99; }
            set { }
        }

        public double RetailPrice
        {
            get { return 1.49; }
            set { }
        }

        public int Quantity
        {
            get { return 50; }
            set { }
        }

        public int MaxQuantity
        {
            get { return 100; }
            set { }
        }

        public InventoryState Status
        {
            get { return InventoryState.Unassigned; }
            set { }
        }

А это различные декларации и рассматриваемый foreach:

public enum InventoryState
    {
        Full,
        Selling,
        Stocking,
        Empty,
        Unassigned
    }

public interface IProduct
{
    string ProductType { get; set; }
    double BulkPrice { get; set; }
    double RetailPrice { get; set; }
    int Quantity { get; set; }
    int MaxQuantity { get; set; }
    InventoryState Status { get; set; }
}

public static IProduct[] ProductList =
{
    new Apple(),
    new Blueberry()
};
foreach (IProduct productName in ProductList) // broken- not being called :(?
            {
                if (productName.Quantity == productName.MaxQuantity)
                {
                    productName.Status = InventoryState.Full;
                    return productName.Status;
                }

                else if (productName.Quantity <= (productName.MaxQuantity * (0.5)))
                {
                    productName.Status = InventoryState.Stocking;
                }

                else if (productName.Quantity == 0)
                {
                    productName.Status = InventoryState.Empty;
                }

                else
                {
                    productName.Status = InventoryState.Selling;
                }
            }

1 Ответ

1 голос
/ 15 апреля 2019

Вы всегда делаете в своих автоматических свойствах

get { return "some value";}

Даже если вы присвоите ему значение, оно всегда вернет «некоторое значение», даже если базовое значение отличается.

Сделайте это для всех ваших свойств:

 public string ProductType
        {
            get; set;
        } = "Apple";

У них будет значение по умолчанию "Apple", но оно будет назначено и возвращено правильно.

Обратите внимание, что значение по умолчанию для свойства auto только начиная с C # 6.0.

В противном случае вам нужно личное поле поддержки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...