繁体   English   中英

会话中的C#列表元素无响应

[英]C# List Elements in the Session Not Responding

我正在做一个简单的程序,将一个学生(带有ID,名称)添加到列表中,然后通过会话按ID搜索学生。

添加学生模块如下所示,

protected void addStudent(object sender, EventArgs e)
        {
            List<Student> thisstdlist = new List<Student>();
            thisstdlist = (List<Student>)Session["stdlist"];
            thisstdlist.Add(new Student(txtsid.Text,txtsname.Text));
            Session["stdlist"] = thisstdlist;
            Response.Redirect("Home.aspx");


        }

搜索学生模块如下所示,

  protected void searchStudent(object sender, EventArgs e)
        {


            foreach (Student element in (List<Student>)Session["stdlist"])
            {
               if(element.getID().Equals(txtstdid.Text)){
                   txtstdname.Text = element.getName();
               }
           }
        }

学生班如下

public class Student
    {
        private String Name;
        private String ID;

        public Student(String sid, String sn) {

            this.Name = sn;
            this.ID = sid;

        }

        public String getName() {

            return this.Name;
        }
        public String getID()
        {

            return this.ID;
        }


    }

但是,当我添加学生时,例如:100,约翰和按100进行搜索,则没有结果。 请任何人告诉我错误或正确的做法。

您是否设置断点并实际检查这些列表的值以及会话中实际存储的值?

.Equals()并没有按照您的想法做

尝试:

 foreach (Student element in (List<Student>)Session["stdlist"])
            {
               if(element.ID == txtstdid.Text){
                   txtstdname.Text = element.getName();
               }
           }

add Student模块将无法正确初始化学生列表-您正在创建新的List<Student> ,然后将新列表与下一行分配一起丢弃。 我会喜欢这样的:

var thisstdlist = (List<Student>)Session["stdlist"];
// If a key isn't found in Session, it will be null ..
if (thisstdlist == null)
{
    // i.e. only re-initialize if it was missing from session
    thisstdlist = new List<Student>();
    // You don't need to continually reassign the session variable
    Session["stdlist"] = thisstdlist;
}
// Adds to the list; now that Session also has a reference to the same list
thisstdlist.Add(new Student(txtsid.Text,txtsname.Text));

根据注释,请注意c#具有自动(尽管可变)属性-您不需要Java风格的getter和setter。

public class Student
{
    public Student(string sid, string sn) 
    {
        Name = sn;
        ID = sid;
    }

    public string Name 
    {
        get;
        set;
    }
    public string ID
    {
        get;
        set;
    }
}

此外,在.Net中,字符串的== 会覆盖测试值(与Java的字符串参考相等性不同),因此您可以将比较重写为:

if (element.ID == txtstdid.Text)
{
    txtstdname.Text = element.Name;
}

回复: foreach -我猜你正在使用的工具ListDictionary (HashMap的)的方式-如果你使用Dictionary而不是List -这将让你删除foreach赞成:

// addStudent ...
var txtstdname = new Dictionary<string, Student>();
 // ... 
txtstdname.Add(txtsid.Text, new Student(txtsid.Text,txtsname.Text))

// searchStudent ...
Student element = null;
if (txtstdname.TryGetValue(out element))
{
    txtstdname.Text = element.Name();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM