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' 而不是实际类型的主要内容,如果未能解决你的问题,请参考以下文章

ReSharper 和隐式类型变量

参数隐式具有“任何”类型

kotlin 变量声明

对象和类型(第四部分)

第5章 变量的更多内容

C#中的var理解