簡體   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