C# 如何在c中从列表中添加和检索行元素#

C# 如何在c中从列表中添加和检索行元素#,c#,asp.net,c#-4.0,C#,Asp.net,C# 4.0,我正在使用Entityframework,在我的应用程序中,我定义了一个类,在该类中我设置了一些属性及其值。由于有一个分步过程,所以我将该类声明为列表,现在我需要在每个步骤中添加行或属性值 //i have declared class as list like below List<ProcessSteps> objSteps = new List<ProcessSteps>(); // for step 1 ProcessStep

我正在使用Entityframework,在我的应用程序中,我定义了一个类,在该类中我设置了一些属性及其值。由于有一个分步过程,所以我将该类声明为列表,现在我需要在每个步骤中添加行或属性值

    //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);
//我已将类声明为如下列表
List objSteps=新列表();
//对于步骤1
ProcessSteps obj=新的ProcessSteps();
对象id=1;
obj.name=“v2k”;
目标步骤=1;
objSteps.Add(obj);
//对于步骤2
ProcessSteps obj=新的ProcessSteps();
对象id=2;
obj.name=“vvk”;
目标步骤=2;
objSteps.Add(obj);

因此,在某个时刻,我需要访问ID1和ID2,但我无法通过objSteps,因为每次objSteps都会覆盖上一个。在调试中显示我为1。

你应该考虑一个ASP.NET页面生命周期,每次你的应用程序收到一个请求时,它会重新创建你的类的新实例(代码落后),所以不管你在类级别上有一个字段,它都会被每个请求重新定义。 那么,您可以做些什么来保持您的

状态

asp.net webforms中有和,您可以使用

在您的情况下,可能是这样的:

public List<ProcessSteps> Steps 
{
    get
    {
        if(ViewState["ProcessSteps"] == null)
            ViewState["ProcessSteps"] = new List<ProcessSteps>();
        return (List<ProcessSteps>)ViewState["ProcessSteps"];
    }
    set
    {
        ViewState["ProcessSteps"] = value;
    }
}
公共列表步骤
{
得到
{
if(ViewState[“ProcessSteps”]==null)
ViewState[“ProcessSteps”]=新列表();
返回(列表)视图状态[“ProcessSteps”];
}
设置
{
ViewState[“ProcessSteps”]=值;
}
}

最初,您的逻辑将给出如下错误

此范围中已定义名为“obj”的局部变量

因此,尝试更改实例名称。我只是根据您的逻辑创建了一个控制台应用程序,如

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();
    }
static void Main(字符串[]args)
{
List objSteps=新列表();
//对于步骤1
ProcessSteps obj=新的ProcessSteps();
obj.id=1;
obj.name=“v2k”;
目标步骤=1;
objSteps.Add(obj);
//对于步骤2
ProcessSteps obj2=新的ProcessSteps();
obj2.id=2;
obj2.name=“vvk”;
obj2.Step=2;
objSteps.Add(obj2);
foreach(对象步骤中的变量项)
{
Console.WriteLine(项目名称);
}
Console.ReadLine();
}

它工作正常。

每一步都有一个回发。这意味着您在每一步初始化ObjStep时都会回发它…为什么添加一个新值来列出,而不是写入列表中以前的值list@CodingDefined没有初始化一次的objSteps,但我在每个步骤上初始化obj,因为每个步骤都有回发,页面将再次加载,对象步骤将再次初始化。当您再次添加它时,因为新的objSteps没有任何值,它将添加并显示1。