有没有一种方法可以循环遍历数组,在c#中编辑数组的内容,然后再次循环遍历以显示编辑过的内容?

本文关键字:数组 遍历 循环 编辑 然后 显示 有没有 一种 方法 | 更新日期: 2023-09-27 18:09:30

我正在尝试遍历一个产品数组。我想知道是否有可能改变数组的一个元素,然后再次循环以显示它与编辑过的元素。

代码如下:

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"),然后再次循环遍历数组以显示更改。怎么做呢?

有没有一种方法可以循环遍历数组,在c#中编辑数组的内容,然后再次循环遍历以显示编辑过的内容?

虽然你的问题有点不清楚,我想这就是你想要的(下面的代码是而不是测试)。

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(前):待售 - P1(后): 销售
P2(前):销售—— P2(后):销售

无论如何,你确定你想要你的应用程序这样做吗?在我看来,你想要达到的目标略有不同,就像这样:

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

在本例中,输出如下:

P1(前):待售 - P1(后): 销售
P2(前):销售—— P2(后):

希望能有所帮助。

如果您的问题是"我如何确定更改的项目并查看它们",您可以轻松使用它们的索引列表:

private List<int> indexes = new List<int>();
Loop through items
{
 if (item is changed)
  indexes.Add(item's index);
}

为什么不创建一个包含已更改状态的新集合,例如:

    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);
    }