VS2010 显示隐式变量的类型为 'var' 而不是实际类型
Posted
技术标签:
【中文标题】VS2010 显示隐式变量的类型为 \'var\' 而不是实际类型【英文标题】:VS2010 shows implicit variable to be of type 'var' instead of the actual typeVS2010 显示隐式变量的类型为 'var' 而不是实际类型 【发布时间】:2012-05-06 17:43:01 【问题描述】:我不确定这是错误还是其他原因。
我在 VS2010 中创建了一个新的 Web 应用程序项目。在项目中,我新建了一个类(Class1),内容如下:
public void Test()
var s = "Hello";
Console.WriteLine(s);
当我将鼠标悬停在 Console.WriteLine(s) 行中的 s
上时,会出现一个显示 (local variable) string s
的弹出窗口。太好了,正如我所料。
现在,我将App_Code
文件夹添加到项目中。在其中,我再次创建了一个新类(Class2),其内容完全相同(类名除外)。现在,当我将鼠标悬停在s
时,它会显示(local variable) var s
。
为什么显示var
而不是string
?这是一个错误吗?你能重现这种行为吗?
情况更糟。如果我将 Class2.cs 从 App_Code 文件夹移动到项目的根目录,VS2010 仍然不显示类型。即使重新启动 VS2010 并重新打开项目,VS2010 也会在 Class1 中显示正确的类型,但在 Class2 中不会。我也试过删除.suo
和.csproj.user
文件,但仍然没有区别。显然 VS2010 在某处缓存了这些信息。
【问题讨论】:
文件还有其他区别吗?用途?别的东西?如果您复制粘贴其中一个并简单地重命名该类会发生什么? 好吧,如果文件没有差异,则说明您的定义存在冲突;即它不编译。它向您显示 either 文件中的任何内容的事实令人惊叹。 这就是为什么 a 不喜欢使用隐式类型。不管有没有错误,如果明确使用类型,我发现它更容易阅读。 即使在重建项目后也会出现这种情况? @Mehrdad:为什么会导致定义冲突?就像我说的,第一个文件是Class1
,第二个文件是Class2
。
【参考方案1】:
App_Code 目录是网站项目的特殊目录。
在 Web 应用程序项目中,放置在 App_Code 目录中的代码会被 VS 忽略。
I noticed this behavior 将网站迁移到 Web 应用程序项目时。
【讨论】:
这很有趣。如果我创建一个网站项目,App_Code
文件夹中的Class2
就像我预期的那样工作。将鼠标悬停在s
上表明它是string
。我认为App_Code
中的代码不会在 Web 应用程序项目中被忽略。我的代码运行得很好,只是 IDE 没有显示变量的类型。【参考方案2】:
我认为这是由于App_Code
文件夹而发生的。因为App_Code
文件夹是在运行时编译的。正如 MSDN 在这里描述的那样。
在网站项目中,您可以将源代码存储在 App_Code 文件夹,它会在运行时自动编译。这 生成的程序集可供 Web 中的任何其他代码访问 应用。因此,App_Code 文件夹的工作方式与 Bin 文件夹,除了您可以在其中存储源代码而不是 编译的代码。 App_Code 文件夹及其在 ASP.NET Web 应用程序可以创建自定义类和 其他仅源代码文件并在您的 Web 应用程序中使用它们 无需独立编译。
Here is MSDN link
【讨论】:
这并不能真正回答我的问题。是的,它可能与App_Code
文件夹有关,因为问题只发生在该文件夹内的类文件上。根据 devio 的回答,我发现在一个网站项目中,问题不会发生。所以基本上你可以在 Web 应用程序项目中使用App_Code
,但你不应该那样做。以上是关于VS2010 显示隐式变量的类型为 'var' 而不是实际类型的主要内容,如果未能解决你的问题,请参考以下文章