【发布时间】:2020-05-14 04:04:45
【问题描述】:
struct MYSTRUCT
{
public int x;
public int y;
public int z;
}
MYSTRUCT s;
s.x = 2;
s.y = 4;
Console.WriteLine(s); //error on this line
这会产生编译错误
错误 CS0165:使用未分配的局部变量“s”
它提出了几个问题-首先,由于结构是值类型且不可为空,为什么需要初始化s?其次,为什么分配给s.x和s.y OK,只有最后一行产生错误?
我不是询问如何修复我的代码,它只是让我感兴趣,为什么必须将结构分配/初始化为值类型?
(注意:MYSTRUCT 只有简单的byte/int 成员)
【问题讨论】:
-
MYSTRUCT 长什么样子?
-
结构确实有默认值...它们不能是
null。但是 C# 仍然希望你初始化它们,如果你不这样做会抱怨。您初始化了s.x和s.y,但没有初始化s本身。至于“为什么”,唯一能告诉你的是 MS 的语言团队。 -
这个错误的想法是强迫某人明确声明他们想要一个变量初始化为默认值并不是强迫人们这样做的坏事,当你忘记初始化时它会捕获错误它到一个实际值。由于它是一个结构,我相信除非您实际使用该变量,否则这些分配无关紧要,因此这就是错误出现在
Console.WriteLine上的原因。而且我猜他们不会对这种情况做任何特殊处理,因为可变结构一开始是个坏主意。 -
MYSTRUCT除了x和y之外还有其他实例字段吗?
标签: c#