我正在尝试为XNA编写一些代码来拥有自己的绘图模块,我可以用它来缓存/绘制静态顶点/索引。
Here's the class,我遇到麻烦的问题是第51行。
_vertexBuffer.SetData(_vertices.ToArray());
它有错误:The type 'T' must be a non-nullable value type in order to use it as parameter 'T'
它似乎不喜欢它,因为SetData通常期望Vertices数组与VertexBuffers构造函数中使用的VertexDeclaration
匹配,而我对list / class的定义表明它可以是任何类型。< / p>
是否有将<T>
指定为顶点?
答案 0 :(得分:2)
他们被称为generic type constraints。无论VertexBuffer
类型是什么,它都有这个方法:
void SetData<T>(...) where T : struct
这是造成错误的原因。
事实上,MSDN说这是方法签名:
public void SetData<T> (
T[] data
) where T : ValueType
基本相同。
因此,要解决此问题,您必须传入值类型的项目数组,而不是引用类型。也就是说,您DrawModule<T>
的实例化必须为DrawModule<ValueTypeHere>
。