抱歉,如果我很难正确表达这一点。OOP 不是我的专长,但我非常努力学习。
如何在循环的每三次迭代中创建一个对象的实例?
在一个循环中,我需要为一个对象赋值,但要赋值的属性将取决于 case 语句的结果。一旦分配了对象的每个属性,我就需要将该对象添加到相同类型的对象列表中。
如果我在进入循环之前创建对象,那么我的列表只会一遍又一遍地包含相同的结果,因为(我已经读过)该列表只包含对该对象的引用,并且如果随后更改了对象,清单也是如此。
如果我在循环中创建对象,那么显然,每次将其添加到列表时,我都会获得一个新对象,其中只有一个属性分配给它。该列表将包含不同的结果,但只会分配最后一个属性,因为每次都会创建一个新对象。
因此,我假设您可以做的是在所有属性都分配了值时创建一个新对象(或者在开始时没有分配值)。因此,由于我的对象具有三个属性,每次循环时,我想在 int iCounter 为 0 时添加一个新对象,添加值并增加 iCounter,然后当 iCounter 为 3 时,设置为 0。但是,当我尝试在 if 语句中创建对象时,程序的其余部分看不到该对象存在。
我还假设,我可能会尝试某种宏替换,这是我在 Fox 中通常会采用的方法,但是,(我已经读过)这在 c# 中是一个很大的禁忌。
有任何想法吗?
try
{
cProducts Product = new cProducts();
SqlConn2.Open();
rdr2 = SqlComm2.ExecuteReader();
int iScanLine = 0;
while (rdr2.Read())
{
iScanLine++;
Product.product = rdr2["product"].ToString();
Product.sOrder = rdr2["order_id"].ToString();
switch (rdr2["detail"].ToString())
{
case "Quantity":
Product.quantity = Convert.ToInt16(rdr2["display_value"]) ;
break;
case "Option":
Product.Option = rdr2["display_value"].ToString();
break;
case "Size":
Product.Size = rdr2["display_value"].ToString();
break;
}
if (iScanLine == 3)
{
lProducts.Add(Product);
thisPage.sProducts.Add(lProducts[lProducts.Count() - 1]);
iScanLine = 0;
}
}
}