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

如何在数组中同时存储int值与自定义对象实现仓库布局建模

解决方案

核心思路是统一二维数组的元素类型,同时兼容通行状态标记和货架对象存储能力,推荐使用以下类型安全的实现方案:

1 自定义统一仓库单元格类型

首先定义单元格类型枚举和单元格类,数组的每一个元素都是该单元格类的实例,既可以标记当前位置的通行属性,也可以存储货架对应的自定义对象。

步骤1:定义枚举和单元格类

// 单元格类型枚举
public enum CelType
{
    不可通行,
    可通行,
    货架
}
// 统一仓库单元格类
public class MagazijnCel
{
    public CelType Type { get; set; }
    public MagazijnObject Item { get; set; }
}
// 你原来的货架对象类保持不变
public class MagazijnObject
{
    public string Locatie;
    public int Ranking;
    public string Item;
    public MagazijnObject(string loc, int rank, string it)
    {
        Locatie = loc;
        Ranking = rank;
        Item = it;
    }
}

步骤2:修改数组声明和赋值逻辑

static void Main(string[] args)
{
    MagazijnObject voorbeeld = new MagazijnObject("D02020A", 1, "Meel");
    Console.WriteLine(voorbeeld.Locatie);
    Console.WriteLine(voorbeeld.Ranking);
    Console.WriteLine(voorbeeld.Item);
    // 数组类型改为自定义的单元格类数组
    MagazijnCel[,] GangVoorbeeld = new MagazijnCel[5, 10];
    string gang = "D02";
    // 遍历数组初始化
    for (int i = 0; i < GangVoorbeeld.GetLength(0); i++)
    {
        for (int j = 0; j < GangVoorbeeld.GetLength(1); j++)
        {
            GangVoorbeeld[i, j] = new MagazijnCel();
            if (i == 1 || i == 3) // 货架位置
            {
                GangVoorbeeld[i, j].Type = CelType.货架;
                GangVoorbeeld[i, j].Item = new MagazijnObject(gang + i + j, 1, "test");
            }
            else if (i == 2) // 中间通道,可通行
            {
                GangVoorbeeld[i, j].Type = CelType.可通行;
                GangVoorbeeld[i, j].Item = null;
            }
            else // 其他位置不可通行
            {
                GangVoorbeeld[i, j].Type = CelType.不可通行;
                GangVoorbeeld[i, j].Item = null;
            }
        }
    }
    // 后续使用示例:判断某个位置是否可通行
    bool canWalk = GangVoorbeeld[2, 3].Type == CelType.可通行;
    // 读取货架信息
    if (GangVoorbeeld[1, 2].Type == CelType.货架)
    {
        var goods = GangVoorbeeld[1, 2].Item;
        Console.WriteLine(goods.Locatie);
    }
}

可选简化方案(不推荐)

如果不想额外定义类,可直接声明object[,]类型的二维数组,可通行位置存整数1,不可通行存整数0,货架位置存MagazijnObject实例。但该方案每次读取数据都需要做类型判断和转换,类型不安全,容易出现运行时错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 19:24:08