我正在尝试将一些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
};
基本上,C#中不存在const size_t,并且const int不能用于声明数组的大小。
我想知道如何使用常量值声明数组?
答案 0 :(得分:4)
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
};
答案 1 :(得分:2)
基本上,C#中不存在const size_t,并且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
};
唯一的区别是,如果初始化程序中的项目数与您指定的数字不匹配,则会出现编译时错误。
答案 2 :(得分:1)
float[] array = new float[] { 1.2F, 2.3F, 3.4F, 4.5F };
这是如何在C#
中声明arrays
的
答案 3 :(得分:1)
在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
答案 4 :(得分:1)
所有这些答案实际上都没有回答什么类型相当于size_t的问题。在.NET中size_t的正确类型是UIntPtr。它在32位平台上为32位,在64位平台上为64位,未签名。它是唯一真正等同的类型。