You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#如何为自定义Tile类数组设置对应位置的BlankTile默认值?

解决方案说明

首先明确:C#中引用类型数组在创建时,所有元素默认初始化为null,不会自动生成BlankTile实例,你提供的示例代码运行时会抛出NullReferenceException,无法得到预期输出。以下是几种可行的实现方案:

方案一:直接循环初始化数组

这是最直观简便的方式,创建数组后遍历索引,为每个位置生成对应坐标的BlankTile:

// 假设一维数组的x为索引值,y固定为0(可根据你的游戏逻辑调整坐标规则)
int arrayLength = 5;
Tile[] tiles = new Tile[arrayLength];
for (int i = 0; i < arrayLength; i++)
{
    tiles[i] = new BlankTile(i, 0);
}

foreach(Tile aTile in tiles)
{
    Console.WriteLine(aTile.GetType().ToString());
}
// 输出:
// BlankTile
// BlankTile
// BlankTile
// BlankTile
// BlankTile

方案二:封装初始化方法复用逻辑

如果需要多次创建这类数组,可以封装一个静态方法,统一处理初始化逻辑:

public static class TileArrayFactory
{
    // 一维数组初始化方法
    public static Tile[] CreateOneDimensionalArray(int length, int fixedY = 0)
    {
        Tile[] tiles = new Tile[length];
        for (int i = 0; i < length; i++)
        {
            tiles[i] = new BlankTile(i, fixedY);
        }
        return tiles;
    }

    // 二维数组初始化方法(更符合游戏背景的常见场景)
    public static Tile[,] CreateTwoDimensionalArray(int width, int height)
    {
        Tile[,] tiles = new Tile[width, height];
        for (int x = 0; x < width; x++)
        {
            for (int y = 0; y < height; y++)
            {
                tiles[x, y] = new BlankTile(x, y);
            }
        }
        return tiles;
    }
}

// 使用示例
Tile[] oneDTiles = TileArrayFactory.CreateOneDimensionalArray(5);
Tile[,] twoDTiles = TileArrayFactory.CreateTwoDimensionalArray(10, 10);

代码优化建议

你提供的Tile和BlankTile类存在冗余代码,可优化如下:

  • 将position改为公开只读属性,避免子类重复赋值
  • 子类构造函数无需再次初始化position,直接调用父类构造即可
using System.Drawing; // 需引用System.Drawing.dll或使用自定义Point类

abstract class Tile 
{
    public Point Position { get; }
    public Tile(int x, int y) => Position = new Point(x, y);
}

public class BlankTile : Tile
{
    public BlankTile(int x, int y) : base(x, y) { }
}

内容的提问来源于stack exchange,提问作者EtherealChilly

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 12:15:43