是否存在为泛型类指定可能类型的方法

本文关键字:类型 方法 存在 泛型类 是否 | 更新日期: 2023-09-27 18:27:13

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

这是课堂,有问题的那一行给我带来麻烦的是第51行。

_vertexBuffer.SetData(_vertices.ToArray());

它有错误:The type 'T' must be a non-nullable value type in order to use it as parameter 'T'

它似乎不喜欢它,因为SetData通常需要一个与VertexBuffers构造函数中使用的VertexDeclaration匹配的顶点数组,而我对列表/类的定义表明它可以是任何类型。

是否将<T>指定为顶点?

是否存在为泛型类指定可能类型的方法

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

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

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

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

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

本质上是一样的。

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