C# C列出会话中未响应的元素
我正在做一个简单的程序,将ID为的StudentName添加到列表中,然后通过会话按ID搜索Student 添加学生模块如下所示C# C列出会话中未响应的元素,c#,asp.net,list,session,C#,Asp.net,List,Session,我正在做一个简单的程序,将ID为的StudentName添加到列表中,然后通过会话按ID搜索Student 添加学生模块如下所示 protected void addStudent(object sender, EventArgs e) { List<Student> thisstdlist = new List<Student>(); thisstdlist = (List<Student>)S
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");
}
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;
}
}
但当我添加学生时,对于ex:100、John和Search by 100,我没有得到任何结果。请告诉我错误或正确的方法。添加学生模块无法正确初始化学生列表-您正在创建一个新列表,然后将新列表与下一行作业一起丢弃。我会选择这样的方式:
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));
此外,在.Net中,==for strings用于测试值,这与Java的字符串引用相等不同,因此您可以将比较重写为:
if (element.ID == txtstdid.Text)
{
txtstdname.Text = element.Name;
}
Re:foreach-我猜这意味着您正在以字典HashMap的方式使用列表-如果您使用字典而不是列表-这将允许您删除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();
}
“添加学生”模块无法正确初始化学生列表-您正在创建一个新列表,然后将新列表与下一行作业一起丢弃。我会选择这样的方式:
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));
此外,在.Net中,==for strings用于测试值,这与Java的字符串引用相等不同,因此您可以将比较重写为:
if (element.ID == txtstdid.Text)
{
txtstdname.Text = element.Name;
}
Re:foreach-我猜这意味着您正在以字典HashMap的方式使用列表-如果您使用字典而不是列表-这将允许您删除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();
}
您是否设置断点并实际检查这些列表的值以及会话中实际存储的内容 .Equals不是在做你认为应该做的事 尝试:
foreach (Student element in (List<Student>)Session["stdlist"])
{
if(element.ID == txtstdid.Text){
txtstdname.Text = element.getName();
}
}
您是否设置断点并实际检查这些列表的值以及会话中实际存储的内容 .Equals不是在做你认为应该做的事 尝试:
foreach (Student element in (List<Student>)Session["stdlist"])
{
if(element.ID == txtstdid.Text){
txtstdname.Text = element.getName();
}
}
为什么要使用方法获取字段值?你可以使用自动实现的属性,这不是java,我怎么做?请指导我为什么使用方法获取字段值?你可以使用自动实现的属性,这不是java,我怎么做?请告诉我您不能直接调用element.ID,因为它是私有的,所以我使用了element.getID,但仍然没有结果:对不起,我错过了。然后把它公开,如果你有一个公开的功能来获取它。或只需调用GetID==+1。Java style.Equals虽然在.Net中显然不是一个常见的约定,但在Java中是必需的。您不能直接调用element.ID,因为它是私有的,所以我使用了element.getID,但仍然没有结果:对不起,我错过了。然后把它公开,如果你有一个公开的功能来获取它。或只需调用GetID==+1。Equals虽然显然不是.Net中常见的约定,但在Java中却是必需的。