Есть ли способ перебрать массив, отредактировать содержимое массива в C # и повторить его снова, чтобы показать отредактированное содержимое? - PullRequest
0 голосов
/ 25 сентября 2011

Я пытаюсь перебрать множество продуктов.Мне было интересно, можно ли вообще изменить элемент массива, а затем повторить его снова, чтобы отобразить его с отредактированным элементом.

Вот код:

public enum ProductStatus
{
    ForSale,
    Sold,
    Shipped
}

class Product
{
    private string description;
    private decimal price;
    private ProductStatus status;

    public string Description
    {
        get { return description; }
        set { description = value; }
    }

    public decimal Price
    {
        get { return price; }
        set { price = value; }
    }

    public ProductStatus Status
    {
        get { return status; }
        set { status = 0; }
    }

И затем для создания экземпляра массива:

Product[] products = new Product[3];
products[0] = new Product() { Description = "Dress", Price = 69.99M };
products[1] = new Product() { Description = "Hat", Price = 5.95M};
products[2] = new Product() { Description = "Slacks", Price = 32.00M};

Переопределив метод ToString(), я перебираю его следующим образом:

ProductStatus status = ProductStatus.ForSale;
ProductStatus nextStatus = status + 1;

for (int i = 0; i < products.Length; i++)
{
    Product p = products[i];
    Console.WriteLine("{0}: " + p.ToString(), status.ToString());
}

Я хотел бы использовать nextStatusизменить первый индекс ProductStatus с «ForSale» на «Sold» (а затем «Shipped» впоследствии), а затем снова выполнить цикл по массиву, чтобы показать изменения.Как это сделать?

Ответы [ 3 ]

1 голос
/ 25 сентября 2011

Если ваш вопрос «Как я могу определить измененные элементы и просмотреть их», вы можете легко использовать список их индексов:

private List<int> indexes = new List<int>();

Loop through items
{
 if (item is changed)
  indexes.Add(item's index);
}
1 голос
/ 25 сентября 2011

Почему бы не создать новую коллекцию, содержащую измененные статусы, например:

    ProductStatus status = ProductStatus.ForSale;
    ProductStatus nextStatus = status + 1;
    var statusChangesList = new List<KeyValuePair<Product, Status>>();
    foreach (var product in products)
    {
        statusChangesList.Add(new KeyValuePair<Product, Status>(product, product.Status));
        product.Status = nextStatus;
    }

    foreach (var statusChange in statusChangesList)
    {
        Console.WriteLine("Product: " + statusChange.key + " changed status from: " + statusCahnge.value);
    }
1 голос
/ 25 сентября 2011

Хотя ваш вопрос немного неясен, я полагаю, это то, что вы хотите ( код ниже не проверено ).

private void ChangeStatus(ProductStatus initialStatus, Product[] products)
{
    ProductStatus nextStatus = initialStatus + 1;
    foreach (var p in products)
    {
        p.Status = nextStatus;
    }
}

private void ShowProducts(Product[] products)
{
    foreach (var p in products)
    {
        Console.WriteLine("{0}: " + p.ToString(), status.ToString());
    }
}

И выводможет выглядеть следующим образом (при условии ForSale в качестве исходного состояния):

P1 (до): ForSale - P1 (после) : Продано P2 (до): Продано - P2 (после): Продано

В любом случае, вы?уверены, что ваше приложение должно вести себя так?По моему мнению, то, что вы пытаетесь достичь, немного отличается, что-то вроде этого:

private void ChangeStatus(Product[] products)
{
    foreach (var p in products)
    {
        p.Status = p.Status + 1;
    }
}

В этом случае вывод будет следующим:

P1 (до): ForSale - P1 (после) : Продано P2 (до): Продано - P2 (после): Поставляется

Надеюсь, это поможет.

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