为什么CancellationToken类型的局部变量不需要初始化?

Ora*_*ace 10 c# constructor struct cancellation-token

我在针对.NET Framework 4.6.1的项目中使用VisualStudio 2017.

Task,CancellationToken和本地方法,我来到这个代码:

class Program
{
    static void Main(string[] args)
    {
        CancellationToken o;
        Console.WriteLine(o);
    }
}
Run Code Online (Sandbox Code Playgroud)

哪个编译.现在,如果您将类型更改o为a intstring它将无法编译,则会给出错误:

在访问之前,可能不会初始化局部变量"o".

我试图CancellationToken在名为的结构中反编译并复制代码MyCancellationToken.那也不会编译.

我设法编译的唯一情况是一个空结构或包含一个结构的结构CancellationToken.

struct EmptyStruct
{
}

struct MagicStruct
{
    public CancellationToken a;
}

class Program
{
    static void Main(string[] args)
    {
        EmptyStruct a;
        MagicStruct b;
        Console.WriteLine(a);
        Console.WriteLine(b);
    }
}
Run Code Online (Sandbox Code Playgroud)
  • 为什么CancellationToken不需要初始化?
  • 有哪些不需要初始化的类型?

有趣的事实:如果你将它与本地函数混合,你可以这样写:

class Program
{
    static void Main(string[] args)
    {
        Work();

        CancellationToken o;

        void Work() => Console.WriteLine(o);
    }
}
Run Code Online (Sandbox Code Playgroud)

哪个编译.