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链接到这篇文章的。无论哪种方式,在我看来,所发生的事情都没有错,但在我看来,突出显示/标记未使用变量的代码可以改进。