无法使用集合初始值设定项实现类型,因为它没有实现' System.Collections.IEnumerable'

时间:2015-07-30 09:49:15

标签: c# arrays xna vertices quad

我在C#和XNA工作。

我有一个班级:

class Quad
    {
        public Texture2D Texture;
        public VertexPositionTexture[] Vertices = new VertexPositionTexture[4];
    }

我正在尝试创建所述类的新实例:

Quad tempQuad = new Quad() 
{
    Texture = QuadTexture,
    Vertices[0].Position = new Vector3(0, 100, 0),
    Vertices[0].Color = Color.Red
};

然后将其添加到" Quad" s

的列表中
QuadList.Add(tempQuad);

我不断收到错误:

  

"无法使用集合初始值设定项实现类型,因为它没有实现' System.Collections.IEnumerable'"

或者我被告知

  

当前上下文中不存在顶点。

有没有理由我不能像这样创建课程?我傻了吗?我必须这样做吗?:

Quad tempQuad = new Quad();

tempQuad.Vertices[0].Position = new Vector3(0, 100, 0);
tempQuad.Color = Color.Red;

QuadList.Add(tempQuad);

有没有办法解决这个问题?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

对象初始化语法期望分配给您正在初始化的对象的属性,但是通过尝试分配给Vertices[0],您试图分配给对象上的属性索引的属性。重新初始化(!)。

只要直接指定Vertices,就可以使用对象初始化语法:

Quad tempQuad = new Quad() 
{
    Texture = QuadTexture,
    Vertices = new VertexPositionTexture[]
                {
                    new VertexPositionTexture 
                    {
                        Position = new Vector3(0, 100, 0),
                        Color = Color.Red
                    }, 
                    // ... define other vertices here
                }
};

正如你所看到的,这很快变得相当混乱,所以你最好在对象初始化之外初始化数组:

var vertices = new VertexPositionTexture[]
                {
                    new VertexPositionTexture 
                    {
                        Position = new Vector3(0, 100, 0),
                        Color = Color.Red
                    }, 
                    // ... define other vertices here
                };

Quad tempQuad = new Quad() 
{
    Texture = QuadTexture,
    Vertices = vertices
};