我正在做一个简单的程序,把一个学生(有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,John和搜索100,它没有给我任何结果。请任何人告诉我错误或正确的做法。
发布于 2014-02-26 04:33:40
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中,用于字符串is overridden的==用于测试值(不像Java对字符串的引用相等),因此您可以将比较重写为:
if (element.ID == txtstdid.Text)
{
txtstdname.Text = element.Name;
}Re:foreach -我猜这意味着您正在以Dictionary (HashMap)的方式使用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();
}发布于 2014-02-26 04:34:53
您是否设置断点并实际检查这些列表的值以及会话中实际存储的内容?
.Equals()不是在做你想做的事
试着:
foreach (Student element in (List<Student>)Session["stdlist"])
{
if(element.ID == txtstdid.Text){
txtstdname.Text = element.getName();
}
}https://stackoverflow.com/questions/22031762
复制相似问题