请考虑以下代码:
public struct Color {
public int R;
public int G;
public int B;
}
public class App
{
static void Main()
{
Color c;
c.B = 0xFF;
int b = c.B;
}
}
csc愉快地编译代码。我总是认为在可以访问结构的数据成员之前,必须分配结构的所有字段。这是csc.exe的特色吗?
我认为NullReferenceExceptions不是正确的解决方案,因为我们在这里讨论结构。
答案 0 :(得分:3)
来自MSDN:
使用new运算符创建struct对象时,它会获得 创建并调用适当的构造函数。与课程不同, 可以在不使用new运算符的情况下实例化结构。在这样的 case,没有构造函数调用,这使得分配更多 高效。但是,字段将保持未分配和对象 在初始化所有字段之前不能使用。
来自MSDN:
编译器错误CS0170 :使用可能未分配的字段“字段”。一个 在没有首先初始化的情况下使用结构中的字段。至 解决这个问题,首先确定哪个字段未初始化 然后在尝试访问它之前初始化它。
来自MSDN:
编译器错误CS0165 :使用未分配的本地变量'name'。 C#编译器不允许使用未初始化的变量。如果 编译器检测到可能没有的变量的使用 初始化后,它会生成编译器错误CS0165。
这是错误的:
我一直认为必须先分配结构的所有字段才能访问结构的数据成员
正确的是:
在可以访问结构之前,必须先分配结构的所有字段。
for k in range(number gf bike stations):
答案 1 :(得分:0)
参考此链接
如果您使用Color c;
字段未初始化,但如果您Color c = new Color();
,则会初始化所有字段。
如果您运行以下代码。它将无法编译。
Color c;
int b = c.B;
但这将被编译。
Color c = new Color();
// c.B = 0xFF;
int b = c.B;