C#VAR基本了解

时间:2014-02-21 10:51:21

标签: c# var

基本上我有一个如下功能,允许用户在执行应用程序时登录:

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吗?为什么它保留旧数据并扩展而不是刷新?

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开始。