C# 警告CS0219未使用的局部变量取决于Nullable<&燃气轮机;语法?

C# 警告CS0219未使用的局部变量取决于Nullable<&燃气轮机;语法?,c#,compilation,nullable,compiler-warnings,C#,Compilation,Nullable,Compiler Warnings,考虑以下代码: static void Main() { int? a = new int?(12); // warning CS0219: The variable 'a' is assigned but its value is never used int? b = 12; // warning CS0219: The variable 'b' is assigned but its value is never used int? c = (int

考虑以下代码:

static void Main()
{
  int? a = new int?(12);   // warning CS0219: The variable 'a' is assigned but its value is never used
  int? b = 12;             // warning CS0219: The variable 'b' is assigned but its value is never used
  int? c = (int?)12;       // (no warning for 'c'?)
}
三个变量
a
b
c
实际上是等价的。在第一种方法中,我们显式地调用
Nullable
上的公共实例构造函数。在第二种情况下,我们利用从
T
T?
的隐式转换。在第三种情况下,我们显式地编写转换

我的问题是,为什么VisualC#5.0编译器(来自VS2013)不会像对待前两个变量那样发出
C
警告

生成的IL代码在所有三种情况下都是相同的,包括调试(无优化)和发布(优化)

不确定此警告是否包含在语言规范中。否则,C#编译器像这样不一致是“有效的”,但我想知道原因是什么

PS如果一个人非常喜欢
var
关键字,那么写
var c=(int?)12实际上是合理的其中需要强制转换语法以使
var
按预期工作


PPS我知道在
int?neverUsed=可能有副作用的方法调用(),请参见。

通过Roslyn最终用户预览,产生警告的是
b
c
(而不是
a
)。Mono会为它们生成警告。。。顺便说一句,我强烈反对使用
var
。。。如果您必须强制转换,您也可以这样声明变量。注意到与VS2015预览中的@JonSkeet相同的行为。
CS0219
的错误代码实际上是通过bing/VS2015:P链接到这篇文章的。无论哪种方式,在我看来,所发生的事情都没有错,但在我看来,突出显示/标记未使用变量的代码可以改进。