我正在使用Entityframework并且在我的应用程序中我定义了一个类,其中我已经设置了一些属性及其值。由于有一个逐步的过程,所以我已经将类声明为List现在我需要添加行或属性每一步的价值观。
//i have declared class as list like below
List<ProcessSteps> objSteps = new List<ProcessSteps>();
// for step 1
ProcessSteps obj = new ProcessSteps();
obj.id= 1;
obj.name= "v2k";
obj.Step=1;
objSteps.Add(obj);
// for step 2
ProcessSteps obj = new ProcessSteps();
obj.id= 2;
obj.name= "vvk";
obj.Step=2;
objSteps.Add(obj);
所以在某些时候我需要同时访问id 1和2,但我无法通过objSteps获取,因为每次objSteps都会覆盖前一个。并且在调试时显示我数为1。
答案 0 :(得分:0)
你应该考虑一个asp.net页面生命周期,每次你的应用程序收到请求时它会重新创建你的类的新实例(代码隐藏),所以如果你在类级别上有一个字段就没关系了将根据每个请求重新定义。
那么你可以做些什么来保护你的state
?
您可以使用asp.net webforms中的ViewState和Session。
在你的情况下可能是这样的:
public List<ProcessSteps> Steps
{
get
{
if(ViewState["ProcessSteps"] == null)
ViewState["ProcessSteps"] = new List<ProcessSteps>();
return (List<ProcessSteps>)ViewState["ProcessSteps"];
}
set
{
ViewState["ProcessSteps"] = value;
}
}
答案 1 :(得分:0)
最初你的逻辑会给出错误,如
A local variable named 'obj' is already defined in this scope
。
因此,请尝试更改您的实例名称。我只需根据您的逻辑创建一个控制台应用程序,如
static void Main(string[] args)
{
List<ProcessSteps> objSteps = new List<ProcessSteps>();
// for step 1
ProcessSteps obj = new ProcessSteps();
obj.id = 1;
obj.name = "v2k";
obj.Step = 1;
objSteps.Add(obj);
// for step 2
ProcessSteps obj2 = new ProcessSteps();
obj2.id = 2;
obj2.name = "vvk";
obj2.Step = 2;
objSteps.Add(obj2);
foreach (var item in objSteps)
{
Console.WriteLine(item.name);
}
Console.ReadLine();
}
它工作正常。