C#中的C ++ const size_t的等价物是什么?

我正在尝试将一些Ogre代码翻译成它的C#版本,我遇到了一个问题:

const size_t nVertices = 8; const size_t vbufCount = 3*2*nVertices; float vertices[vbufCount] = { -100.0,100.0,-100.0, //0 position -sqrt13,sqrt13,-sqrt13, //0 normal //... -sqrt13,-sqrt13,sqrt13, //7 normal }; 

基本上,const size_t在C#中不存在,而const int不能用于声明数组的大小。

我想知道如何声明具有常量值的数组?

size_t是一个typedef(类似于#define宏),它基本上是另一种类型的别名。 它的定义取决于SDK,但它通常是unsigned int

无论如何,在这种情况下它并不重要因为它们是常量,所以你知道nVertices是8而vbufCount是48.你可以在C#中这样写它:

 const int nVertices = 8; const int vbufCount = 3 * 2 * nVertices; float[] vertices = new float[vbufCount] { -100.0,100.0,-100.0, //0 position -sqrt13,sqrt13,-sqrt13, //0 normal //... -sqrt13,-sqrt13,sqrt13, //7 normal }; 

基本上,const size_t在C#中不存在,而const int不能用于声明数组的大小。

这不是因为const int ,而是因为数组大小不是C#中数组类型的一部分。 您可以将代码更改为:

 float[] vertices = { -100.0f,100.0f,-100.0f, //0 position -sqrt13,sqrt13,-sqrt13, //0 normal //... -sqrt13,-sqrt13,sqrt13, //7 normal }; 

还有其他几种方法可以做同样的事情,包括:

 const int nVertices = 8; const int vbufCount = 3*2*nVertices; float[] vertices = new float[vbufCount] { -100.0f,100.0f,-100.0f, //0 position -sqrt13,sqrt13,-sqrt13, //0 normal //... -sqrt13,-sqrt13,sqrt13, //7 normal }; 

唯一的区别是,如果初始化程序中的项目数与您指定的数字不匹配,则会出现编译时错误。

 float[] array = new float[] { 1.2F, 2.3F, 3.4F, 4.5F }; 

这个如何在C#中声明arrays

在C ++中,size_t是一个至少为16位的无符号整数类型,它遵循CPU的本机整数类型。 换句话说,sizeof(size_t)并不固定,即使大多数人将它用作’unsigned int’。 在C#中没有这样的东西。

C#中的大小(f.ex。使用数组和列表时)通常是类型’int’,它是一个32位整数。

在你的情况下,我可能会使数组只读,并使用’vertices.Length’,例如:

  private readonly float[] vertices = new float[] { 1f,2f,3f,4f,5.2f // etc }; 

或者在这种情况下,我可能将其定义为2D数组并使用vertices.GetLength:

  private readonly float[,] vertices = new float[5,5]; // fill in code: vertices[0, 0] = 0; // etc 

所有这些答案实际上并没有回答什么类型相当于size_t的问题。 在.NET中size_t的正确类型是UIntPtr。 它在32位平台上是32位,在64位平台上是64位,而且是无符号的。 它是唯一真正等同的类型。