2011-09-25 16 views
0

我正試圖通過一系列產品進行循環。我想知道是否可以更改數組的一個元素,然後再次遍歷它以使用編輯的元素顯示它。有什麼方法可以循環訪問數組,編輯C#中數組的內容,並通過循環再次顯示編輯的內容?

下面是代碼:

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」更改爲「已售出「(然後是」發貨「),然後再次循環顯示數組以顯示更改。如何做到這一點?

+4

不清楚是什麼問題。只需循環兩次(或3倍,4倍,...) –

回答

1

雖然你的問題有點不清楚,我想這是你想要的(下面的代碼是不是測試)。

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(後):發貨

希望它能幫助。

1

如果你的問題是「我怎樣才能確定更改的項目,並查看他們」,你可以很容易地使用他們的endexes的列表:

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

Loop through items 
{ 
if (item is changed) 
    indexes.Add(item's index); 
} 
1

爲什麼不創建一個包含更改的狀態,如一個新的集合:

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