反正是否指定泛型类的可能类型?

时间:2013-08-10 12:49:39

标签: c# generics xna

我正在尝试为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>指定为顶点?

1 个答案:

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