在结构中初始化列表

The*_*kai 1 c# struct initialization

我目前有一个Match结构,其中包含一个Blocks列表.

public struct Match{
    public List<Block> blocks;
}
Run Code Online (Sandbox Code Playgroud)

当我尝试创建一个新的Match(在本例中,称为matchData)并将Blocks添加到其Block列表时,我的编译器输出:

Use of unassigned local variable 'matchData'
Run Code Online (Sandbox Code Playgroud)

我尝试通过这样做来初始化列表:

public struct Match{
    public List<Block> blocks = new List<Block>();
}
Run Code Online (Sandbox Code Playgroud)

这会导致以下错误:

Structs cannot have instance field initializers
Run Code Online (Sandbox Code Playgroud)

那么我应该如何初始化我的Match结构?我必须做一个构造函数吗?

Mik*_*son 5

来自MSDN:

初始化结构体中的实例字段也是一个错误.您只能通过使用参数化构造函数或在声明结构后单独访问成员来初始化struct成员.任何私有或其他无法访问的成员只能在构造函数中初始化.

http://msdn.microsoft.com/en-us/library/0taef578.aspx

所以你可以在参数化构造函数中初始化列表,如下所示:

public struct Match{
    public List<Block> blocks;

    public Match(List<Block> blocks)
    {
        this.blocks = blocks;
    }
}
Run Code Online (Sandbox Code Playgroud)

或者从外面设置:

Match m = new Match();
m.blocks = new List<Block>();
Run Code Online (Sandbox Code Playgroud)

作为旁注,你可能最好在这里使用类而不是结构.你使用dosent似乎符合典型的用例,如下所示:http://msdn.microsoft.com/en-us/library/ah19swz4.aspx