考虑以下简单程序:
static class Program
{
static void Main()
{
}
static void Method(short? x)
{
const int y = 50; // note: is Int32, but is const and within Int16 range
var z = x ?? y; // note: var keyword used; IDE is confused about the type!
TakeOnlyInt16(z);
z.OnThisInt16();
}
static void TakeOnlyInt16(short a)
{
}
static void OnThisInt16(this short a)
{
}
}
该程序绝对没有问题,并且可以毫无问题地编译。(您可以运行它,可能包括对Methodfrom的调用Main。)
但是,Visual Studio IDE对局部变量的类型有一个错误的印象z。它似乎认为它实际上是一个z(在 C# 中又名)。问题至少在三种情况下表现出来:Int32Int16short
当您“悬停”在(将鼠标悬停在)
var关键字上时,它会Int32在工具提示中显示您。那是错的。当您将文本(键盘)光标移动到语句
TakeOnlyInt16(z);inside 内Method时,它会在该语句的左下角显示一个小提示,提供“为TakeOnlyInt16in生成方法存根Program”。这是错误的,因为该方法显然已经存在。但似乎认为已经存在的过载是错误的。short和int。当你
z.在里面输入 (zed dot)Method时,成员就会Int32出现在intellisense中。请注意, 的重载CompareTo是由 声明的重载,Int32而不是由声明的重载Int16。此外,当您键入时,智能感知成员列表中缺少扩展方法z.。
希望您在没有屏幕截图的情况下理解我的解释。
问题:这个错误来自哪里?它是众所周知的吗?它也在旧版本的 Visual Studio 中吗?
我在VS2013中试过这个。