C# 是否仍然可以为泛型类指定可能的类型?

C# 是否仍然可以为泛型类指定可能的类型?,c#,generics,xna,C#,Generics,Xna,我正在尝试为XNA编写一些代码,以便拥有自己的绘图模块,可以用来缓存/绘制静态顶点/索引 ,给我带来麻烦的那条线路是51号线 _vertexBuffer.SetData(_vertices.ToArray()); 它有错误:类型“T”必须是不可为null的值类型,才能将其用作参数“T” 它似乎不喜欢它,因为SetData通常需要一个顶点数组来匹配VertexBuffers构造函数中使用的VertexDeclaration,而我对列表/类的定义是它可以是任何类型 是否仍要将指定为顶点?它们被调用

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

,给我带来麻烦的那条线路是51号线

_vertexBuffer.SetData(_vertices.ToArray());
它有错误:
类型“T”必须是不可为null的值类型,才能将其用作参数“T”

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

是否仍要将
指定为顶点?

它们被调用。无论
VertexBuffer
类型是什么,它在该方法上都有以下内容:

void SetData<T>(...) where T : struct
void SetData(…),其中T:struct
这就是导致错误的原因

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

public void SetData<T> (
     T[] data
) where T : ValueType
public void SetData(
T[]数据
)其中T:ValueType
基本上是一样的


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

不要参考外部站点获取相关代码。查看
SetData
是否需要特定类型,为什么要将类设置为泛型?你不能用那个特定的类型(或它的基)来代替
t
?@dasblinkenlight我确实试过了,但是我仍然得到了同样的错误,即使我做了
,其中t:iverTextType
它不起作用,因为
SetData
需要一个
结构。很奇怪,在“代码框”的C#选项卡中没有正确的约束语法。在其他页面中,他们确实编写了
,其中T:struct
,这在C#中是正确的。编译器不允许使用
ValueType
我想这是不合法的(我不记得这是合法的)。还有一个,他们在那里使用
t:struct
!很奇怪。疯狂文档生成器:P