2012-05-06 42 views
4

我不确定这是一个错误还是别的。VS2010显示隐式变量的类型是'var'而不是实际的类型

我在VS2010中创建了一个新的Web应用程序项目。在项目中,我创建了一个新的类(1类),其内容如下:

public void Test() 
{ 
    var s = "Hello"; 
    Console.WriteLine(s); 
} 

当我将鼠标悬停我的鼠标悬停在Console.WriteLine命令(或多个)线s,则会弹出显示(local variable) string s。太棒了,就像我期望的一样。

Correctly showing s to be of type string

现在,我添加一个App_Code文件夹到项目中。在它里面,我再次创建一个新的类(Class2),其内容完全相同(类名除外)。现在,当我翱翔s时,它显示(local variable) var s

Incorrectly showing s to be of type var

为什么显示的string代替var?这是一个错误?你能重现这种行为吗?

它更糟。如果将Class2.cs从App_Code文件夹移到项目的根目录,VS2010仍然不显示类型。即使在重新启动VS2010并重新打开项目后,VS2010也会在Class1中显示正确的类型,但不会显示在Class2中。我也尝试删除.suo.csproj.user文件,但仍然没有区别。很明显,VS2010将这些信息缓存在某处。

+0

这些文件还有其他区别吗? Usings?别的东西?如果您复制粘贴其中一个,然后重命名该类,会发生什么? –

+1

好吧,如果这些文件没有差异,那么您的定义有冲突;即它不编译。它向任何*任何文件显示任何内容的事实都是惊人的。 – Mehrdad

+0

这就是为什么不喜欢使用隐式类型。错误与否,如果明确使用类型,我发现它更容易阅读。 – Bernard

回答

0

App_Code目录是网站项目中一个特殊的目录。

在Web应用程序项目中,置于App_Code目录中的代码被VS忽略。

I noticed this behavior将Web站点迁移到Web应用程序项目时。

+0

这很有趣。如果我创建了一个Web站点项目,App_Code文件夹中的'Class2'就像我期望的那样工作。悬停在's'上显示它是一个'字符串'。我不认为'App_Code'中的代码在Web应用程序项目中被忽略。我的代码运行得很好,只是IDE没有显示变量的类型。 – comecme

0

我认为这是由于App_Code文件夹。因为App_Code文件夹在运行时编译。正如MSDN在这里描述的。

在网站项目中,您可以将源代码存储在App_Code 文件夹中,并且它将在运行时自动编译。生成的程序集可以通过Web 应用程序中的任何其他代码访问。因此,App_Code文件夹与Bin 文件夹非常相似,不同之处在于您可以将源代码存储在其中,而不是使用 编译代码。 App_Code文件夹及其在 ASP.NET Web应用程序中的特殊状态使您可以创建自定义类和其他仅用于源代码的文件,并在Web应用程序 中使用它们,而无需独立编译它们。

Here is MSDN link

+0

这并不能真正回答我的问题。是的,这可能与'App_Code'文件夹有关,因为问题只发生在该文件夹内的类文件上。根据devio的回答,我发现在网站项目中,问题不会发生。所以基本上你可以在Web应用程序项目中使用'App_Code',但是你不会这么做。 – comecme

相关问题