0

我正在尝试为 XNA 编写一些代码以拥有我自己的绘图模块,我可以使用这些模块来缓存/绘制静态顶点/索引。

这是 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 通常需要一个与VertexDeclarationVertexBuffers 构造函数中使用的顶点匹配的顶点数组,而我对列表/类的定义说它可以是任何类型。

无论如何要指定<T>作为顶点吗?

4

1 回答 1

2

它们被称为泛型类型约束。无论VertexBuffer类型是什么,它在那个方法上都有这个:

void SetData<T>(...) where T : struct

这就是导致您的错误的原因。

事实上,MSDN 说这是方法签名:

public void SetData<T> (
     T[] data
) where T : ValueType

这基本上是一样的。

所以,要解决这个问题,您必须传入一个值类型的项目数组,而不是引用类型。也就是说,您的实例DrawModule<T>must be DrawModule<ValueTypeHere>

于 2013-08-10T12:57:32.647 回答