我正在编写以下代码,我创建的任何变量都拖了一个错误:
struct ParagraphInfo
{
public ParagraphInfo(string text)
{
}
int i;
}
错误是:
在将控制权返回给调用者之前,必须完全分配字段'ConsoleApplication15.Program.ParagraphInfo.i'
构造函数被加下划线作为错误的来源,一旦我将其删除,错误就消失了。
发生了什么事?
答案 0 :(得分:1)
当编译器为struct
生成构造函数时,结构中的所有内容都被初始化:
struct ParagraphInfo {
int i;
}
ParagraphInfo pi = new ParagraphInfo();
// pi.i == 0 here.
如果您创建自己的构造函数,则需要确保这一点。这将编译:
struct ParagraphInfo {
int i;
public ParagraphInfo(string text) {
i = 0; // you've guaranteed i is initialized.
}
}
或..
struct ParagraphInfo {
int i;
public ParagraphInfo(string text) : this() {
}
}
您可以使用this()
,因为默认构造函数会为您进行初始化。
答案 1 :(得分:0)
在Struct
类型的构造函数中,必须分配所有字段值。因此,请在构造函数中初始化i
或将ParagraphInfo
更改为class
。
public ParagraphInfo(string text)
{
this.i = 0;
}
int i;