【发布时间】:2020-05-22 14:42:05
【问题描述】:
我有一个很小的静态类。我需要初始化这个锯齿状数组,稍后我将不得不做更多的事情。
namespace Kerumaton
{
static internal class WorldGrid
{
static public int gridWidth;
static public int gridHeight;
static public int gridSizeX, gridSizeY;
static public int[][] gridArray;
static WorldGrid()
{
gridWidth = 10;
gridHeight = 10;
gridSizeX = World.imageWidth % gridWidth;
gridSizeY = World.imageHeight % gridHeight;
gridArray = new int[gridSizeX][];
for (int i = 0; i < gridArray.Length; i++)
{
gridArray[i] = new int[gridSizeY];
}
}
}
}
但我收到一条警告,告诉我最好删除静态构造函数并在声明它们的位置初始化变量。
当然,是的,我听说这会对性能产生重大影响。
但是怎么做呢?声明变量时有没有办法运行代码?我误解了什么吗?警告是虚惊一场吗?我确信答案是显而易见的,但我的 google-fu 只向我展示了非常简单的示例,例如字典内联初始化。
我正在使用 C# 8、Core 3.x、VS2019
【问题讨论】:
-
为什么需要拆分字段声明及其分配?
-
作为参考,您可以很容易地内联初始化它。它不是超级漂亮,但
new int[5].Select(_ => new int[3]).ToArray()有效。 -
@Pavel 不,我已经读过它,但并没有真正明白。 :(
-
微软关于 CA1810 的文档说有正当的理由来禁止警告。当然,您应该尽可能遵守他们的建议。除此之外,如果您的目标是在变量被使用之前对其进行初始化,那么在声明时这样做会更安全且更易于阅读。
标签: c#