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

时间:2018-04-11 09:28:00

标签: c# struct constructor cancellation-token

我在面向.NET Framework 4.6.1的项目中使用VisualStudio 2017。

使用TaskCancellationToken和本地方法,我来到了这段代码:

class Program
{
    static void Main(string[] args)
    {
        CancellationToken o;
        Console.WriteLine(o);
    }
}

哪个编译。现在,如果您将o的类型更改为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);
    }
}
  • 为什么CancellationToken不需要初始化?
  • 其他不需要初始化的类型是什么?

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

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

        CancellationToken o;

        void Work() => Console.WriteLine(o);
    }
}

哪个编译。

0 个答案:

没有答案