在结构内部创建变量会导致由于构造函数而导致的错误

时间:2013-01-27 11:36:21

标签: c# constructor struct

我正在编写以下代码,我创建的任何变量都拖了一个错误:

struct ParagraphInfo
    {
        public ParagraphInfo(string text)
        { 

        }

        int i;
    }

错误是:

  

字段'ConsoleApplication15.Program.ParagraphInfo.i'

在将控制权返回给调用者

之前,必须完全分配

构造函数被加下划线作为错误的来源,一旦我将其删除,错误就消失了。

发生了什么事?

2 个答案:

答案 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;