类库允许使用未分配的结构

时间:2016-04-28 00:25:22

标签: c# compiler-errors

我有我的结构:

public struct MyType
{
    private string value;

    // Methods
    // ... (ToString overrided too)
}

如果我将结构放在Program.cs或其他File.cs中,并且我创建了一个变量MyType(我的结构)并尝试使用它,结果是一个明显的错误:

  

CS0165使用未分配的局部变量

示例:

MyType a; 
Console.WriteLine(a); // Error: Use of unassigned local variable 'a'

MyType b = new MyType(); 
Console.WriteLine(b); // Prints the default value (an empty string)

问题是当我将结构放在类库中时(或者在另一个项目中,或者从NuGet包中),我从Program.cs中使用它:

MyType a;
Console.WriteLine(a); // No error: prints an empty string

为什么会这样?

2 个答案:

答案 0 :(得分:2)

据我所知,这是设计上的。在GitHub上看到这个问题:

'error CS0165: Use of unassigned local variable' is not produced for structs with a private reference type field from a different assembly

此问题已经关闭并标记为"解决方案 - 按设计"。

在该问题中,gafter有这样的说法:

  

这是一个非常痛苦但有意的决定。这复制了先前编译器的(错误)行为。我强烈建议您添加编译器标志/features:strict以获得正确的,规范要求的(但不是向后兼容的)行为。

答案 1 :(得分:-1)

当您从类库中调用Console.WriteLine时,除非您运行的项目支持控制台(命令提示符),否则它将不执行任何操作。对于不支持调试的环境中Debug.WriteLine,它是相同的。