2015-07-30 9 views
1

Я работаю в C# и XNA.Невозможно реализовать тип с инициализатором коллекции, потому что он не реализует «System.Collections.IEnumerable»

У меня есть класс:

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 
}; 

, который затем будет добавлен в список «четверки» с

QuadList.Add(tempQuad); 

Я держу либо получаю сообщение об ошибке:

"Cannot implement type with a collection initializer because it does not implement 'System.Collections.IEnumerable'"

Или я получаю сказали, что

Vertices does not exist in the current context.

Есть ли причина, почему я не могу создать класс, как это? Я тупой? Должен ли я сделать это следующим образом ?:

Quad tempQuad = new Quad(); 

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

QuadList.Add(tempQuad); 

Есть ли способ обойти это вообще? Любая помощь будет принята с благодарностью.

ответ

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 
}; 
+0

А, я вижу сейчас! Спасибо. Это было очень полезно. Я стараюсь избегать беспорядков, поэтому спасибо за предложения! –

 Смежные вопросы

  • Нет связанных вопросов^_^