[英]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
-我猜你正在使用的工具List
中Dictionary
(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.