首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >会话中的C#列表元素没有响应

会话中的C#列表元素没有响应
EN

Stack Overflow用户
提问于 2014-02-26 04:29:29
回答 2查看 181关注 0票数 1

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

添加学生模块如下所示

代码语言:javascript
复制
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");


        }

搜索学生模块如下,

代码语言:javascript
复制
  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();
               }
           }
        }

学生班如下所示

代码语言:javascript
复制
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,John和搜索100,它没有给我任何结果。请任何人告诉我错误或正确的做法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-26 04:33:40

add Student模块无法正确初始化学生列表--您正在创建一个新的List<Student>,然后在下一行作业中抛出新的列表。我想说的是:

代码语言:javascript
复制
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。

代码语言:javascript
复制
public class Student
{
    public Student(string sid, string sn) 
    {
        Name = sn;
        ID = sid;
    }

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

此外,在.Net中,用于字符串is overridden==用于测试值(不像Java对字符串的引用相等),因此您可以将比较重写为:

代码语言:javascript
复制
if (element.ID == txtstdid.Text)
{
    txtstdname.Text = element.Name;
}

Re:foreach -我猜这意味着您正在以Dictionary (HashMap)的方式使用Dictionary(HashMap)--如果您使用Dictionary而不是List --这将允许您删除foreach以支持:

代码语言:javascript
复制
// 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();
}
票数 3
EN

Stack Overflow用户

发布于 2014-02-26 04:34:53

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

.Equals()不是在做你想做的事

试着:

代码语言:javascript
复制
 foreach (Student element in (List<Student>)Session["stdlist"])
            {
               if(element.ID == txtstdid.Text){
                   txtstdname.Text = element.getName();
               }
           }
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22031762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档