[英]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.