未使用的局部变量上的警告CS0219取决于Nullable<>句法?

时间:2014-06-18 14:09:15

标签: 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?)12;       // (no warning for 'c'?)
}

三个变量abc实际上是等价的。在第一个中,我们明确地在Nullable<>上调用公共实例构造函数。在第二种情况下,我们使用从TT?的隐式转换。在第三种情况下,我们明确地编写了转换。

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

在所有三种情况下生成的IL代码都是相同的,包括Debug(无优化)和Release(优化)。

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

PS!如果有人更喜欢var关键字,那么编写var c = (int?)12;实际上是合理的,其中需要使用强制语法来var工作如预期的那样。

PPS!我知道在int? neverUsed = MethodCallThatMightHaveSideEffects();等情况下不会发出警告,请参阅another thread

0 个答案:

没有答案