基本上我有一个如下功能,允许用户在执行应用程序时登录:
public void login(){
//Call StoredProc get a list of records
//and add the results into a list<T> SPList
var tempList = SPList.Where(x=>x.Status==1);
int counter = tempList.Count();
//What is the number of counter?
}
现在,当用户首次运行应用程序时,将执行login
功能,tempList.Count()
预计 2 。
当用户再次使用相同的方法login()
时,tempList.Count()
现在变为 4 ??
但是,如果用户终止应用并重新启动,tempList.Count()
将再次返回 2 ?
不是那个关键字VAR会刷新并且每次返回2吗?为什么它保留旧数据并扩展而不是刷新?
答案 0 :(得分:2)
这与'var'无关。 Var只是一个功能,允许您在声明变量时不必键入类型。
它更多地与LINQ的内部工作有关。您应该了解您的变量tempList不是一个List或Collection,而是一个表达式。 每次对'tempList'进行操作(如调用Count()或迭代它)时,表达式将再次被评估。
这样:
var tempList = SPList.Where(x=>x.Status==1);
int counter = tempList.Count();
将与此完全不同:
var tempList = SPList.Where(x=>x.Status==1).ToList();
int counter = tempList.Count();
在第二个代码示例中,变量'tempList'实际上包含List,而在第一个代码示例中,变量tempList包含一个表达式。
当你向SPList
添加一个新对象,并再次在tempList上调用Count()时,新项目将包含在第一个代码示例中的计数中,而在第二个代码示例中,它将包含在不包括在内。 (因为在第二个示例中,tempList现在是一个separete列表,而在第一个示例中,再次执行计算SPList中项目的表达式。)
答案 1 :(得分:2)
我猜你不明白var
的作用。使用var
,编译器会尝试了解从方法返回的类型。
您的问题是您在内存中保留了一个列表,您可以在其中添加内容,因此计数将会更新。重新启动时,列表再次为空,因此您将从0开始。