Mur*_*lex 5 .net c# datetime compiler-errors compilation
出于好奇:
此代码有效并执行:
public class Program
{
private static DateTime date;
public static void Main()
{
Console.WriteLine(date.ToString("o"));
}
}
Run Code Online (Sandbox Code Playgroud)
看到它在.NET Fiddle上工作
但这甚至不编译(未分配的局部变量):
public class Program
{
public static void Main()
{
DateTime date;
Console.WriteLine(date.ToString("o"));
}
}
Run Code Online (Sandbox Code Playgroud)
看到它(不是)在.NET Fiddle上工作
DateTime是不可为空的值类型,因此不需要将其分配和初始化为具有值,它具有默认值。
那么,为什么编译器允许DateTime字段版本进行编译,而不让本地变量版本进行编译?当代码被编译为IL时,是什么阻止了使用值类型的局部变量?
没有显式初始化的字段会自动初始化为默认值。
这很有用,因为它是一个非常常见的初始值,因此可以节省时间。
没有初始化的本地处于无法使用的状态。
这很有用,因为您很可能做错了什么(特别是如果有多个路径确定初始值),因此仅将其设置为默认值可能会隐藏错误。