C# forloop中的数组分配defaut会话值
在每个循环中,我需要数组serRefine的默认值,但它也需要serRefine[4]的旧值C# forloop中的数组分配defaut会话值,c#,asp.net,arrays,C#,Asp.net,Arrays,在每个循环中,我需要数组serRefine的默认值,但它也需要serRefine[4]的旧值 for (int i = 0; i < rptSize.Items.Count; i++) { Label lblSizeCount = (Label)rptSize.Items[i].FindControl("lblSizeCount"); HiddenField hfSizeID = (HiddenField)rptSize.Items[i].FindControl("hf
for (int i = 0; i < rptSize.Items.Count; i++)
{
Label lblSizeCount = (Label)rptSize.Items[i].FindControl("lblSizeCount");
HiddenField hfSizeID = (HiddenField)rptSize.Items[i].FindControl("hfSizeID");
string[] serRefine = (string[])Session["RefineSelection"];
if (serRefine[4].ToString() != "")
{
string Finalsids = "";
string[] sids = serRefine[4].Split(',');
for (int j = 0; j < sids.Length; j++)
{
if (sids[j].ToString() != hfSizeID.Value)
Finalsids += sids[j].ToString() + ",";
}
Finalsids += hfSizeID.Value;
Finalsids = Finalsids.TrimEnd(',');
serRefine[4] = Finalsids;
}
else
serRefine[4] = hfSizeID.Value;
lblSizeCount.Text = CommonManager.GetProductCountWithAll(serRefine);
}
for(int i=0;i
现在我明白了问题所在。您希望数组在每次迭代时都处于初始状态。但事实并非如此,因为它是引用类型,您正在循环中修改它。下面是一个简化的示例,用于重现这种行为:
string[] RefineSelection = new[] {"A", "B", "C", "D", "E" };
for (int i = 1; i <= 3; i++)
{
string[] serRefine = RefineSelection; // you're not creating a copy but you're referencing the session-array
string hfSizeID = "foo" + i;
Console.WriteLine(string.Join(",", RefineSelection));
serRefine[4] = hfSizeID;
Console.WriteLine(string.Join(",", RefineSelection));
}
因此,在更改之前,将使用上一次迭代中的“foo”值。如前所述,这是因为数组是引用类型,变量的作用域不是循环本身,所以使用相同的引用
您可以从会话
阵列创建克隆:
for (int i = 0; i < rep.Count; i++)
{
string[] copy = (string[])RefineSelection.Clone();
string hfSizeID = "foo" + i;
Console.WriteLine(string.Join(",", copy));
copy[4] = hfSizeID;
Console.WriteLine(string.Join(",", copy));
}
这段代码有什么问题?猜猜看:您正在对
Page\u Load
中的repatter
进行数据绑定,甚至在回发时也会导致它丢失所有更改的值。使用页面的IsPostBack
-属性。但是我的数组值来自session@PurveshDesai:(如果这是对我评论的回答)但您正在抱怨从hiddenfield设置的serRefine[4]
的旧值。是的,但应该在下一个循环中。serRefine[4]将从会话中重置
for (int i = 0; i < rep.Count; i++)
{
string[] copy = (string[])RefineSelection.Clone();
string hfSizeID = "foo" + i;
Console.WriteLine(string.Join(",", copy));
copy[4] = hfSizeID;
Console.WriteLine(string.Join(",", copy));
}
A,B,C,D,E
A,B,C,D,foo0
A,B,C,D,E
A,B,C,D,foo1
A,B,C,D,E
A,B,C,D,foo2