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".
这是因为DateTime.Now是一个属性,而不是文字.属性getter可能有副作用,简单地调用一个可能是有用的.并不是说这是一个好主意,但它并不是禁止的,并且编译器不够聪明,无法判断它是否存在.它无论如何,它最终会调用操作系统代码来获取当前系统时间.
| 归档时间: |
|
| 查看次数: |
166 次 |
| 最近记录: |