我正在尝试遍历一系列产品。我想知道是否可以更改数组的元素,然后再次遍历它以使用已编辑的元素显示它。
以下是代码:
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”),然后再次遍历数组以显示更改。如何做到这一点?
答案 0 :(得分: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(之前): ForSale - P1(之后):已售出
P2(之前): 已售出 - P2(之后): 已售出
无论如何,您确定要让您的应用程序以这种方式运行吗?在我看来,你想要达到的目标略有不同,如下所示:
private void ChangeStatus(Product[] products)
{
foreach (var p in products)
{
p.Status = p.Status + 1;
}
}
在这种情况下,输出如下:
P1(之前): ForSale - P1(之后):已售出
P2(之前): 已售出 - P2(之后): 已发货
希望它有所帮助。
答案 1 :(得分:1)
如果您的问题是“我如何确定更改的项目并查看它们”,您可以轻松使用其索引列表:
private List<int> indexes = new List<int>();
Loop through items
{
if (item is changed)
indexes.Add(item's index);
}
答案 2 :(得分: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);
}