VisualStudio2008奇怪的编译警告,需要解释

Oli*_*ich 4 c# visual-studio-2008

只是对VisualStudio 2008编译器的快速提问.

我们确实已经启用了编译器警告被视为错误的工作正常,但今天我认识到,以下行为:

static void Main(string[] args)
{
    int number = 0;
    DateTime dateTime = DateTime.Now;
}
Run Code Online (Sandbox Code Playgroud)

编译此代码段只会产生一个警告:"已分配变量'number',但永远不会使用其值".

任何人都可以向我解释这个差异,为什么变量数会导致错误,而不是dateTime变量?

好吧,它似乎与文字有关.考虑以下代码:

static void Main(string[] args)
{
    string str1 = "Foo";
    string str2 = str1;
}
Run Code Online (Sandbox Code Playgroud)

尽管从未引用变量"str2",但使用两行进行编译都不会产生警告.如果您注释掉该行string str2 = str1;,则不会使用警告显示变量"str1".

Han*_*ant 5

这是因为DateTime.Now是一个属性,而不是文字.属性getter可能有副作用,简单地调用一个可能是有用的.并不是说这是一个好主意,但它并不是禁止的,并且编译器不够聪明,无法判断它是否存在.它无论如何,它最终会调用操作系统代码来获取当前系统时间.