C#中的动态变量名

本文关键字:变量名 动态 | 更新日期: 2023-09-27 18:24:00

(没有实际的函数需要它,但我只是想知道。)

想象一下,在这个函数中,我传递一个bool[,]。此bool[,]根据情况命名为grid1grid2

我想知道我是否可以做以下事情:

void CheckGrid(bool[,] grid, int number)
{
    for (int x = 0; x <= gridXmax - 1; x++)
    {
        for (int y = 0; y <= gridYmax - 1; y++)
        {
            if(grid + number[x,y]) //this will check against grid1 or grid2, depending on int number
                //logic depends on whether it's grid1 or grid2
        }
    }
}

根据其他语言的问题猜测,这可能是不可能的。但你永远不会知道:)

很可能我错过了一些显而易见的东西——我没有真正的经验。

C#中的动态变量名

您可以创建一个网格数组,然后使用数值进行检查。

List<bool[,] grids = new List<bool[,]>();

然后

if (grids[number][x,y])...

否-对象没有名称,只有变量有名称。因此,尽管您传递了对数组的引用,但该方法无法知道您是碰巧使用了一个名为grid1的变量作为参数,还是使用了一种名为grid2的变量。

通常,当出现这样的问题时,答案是说可以使用反射按名称访问成员变量,但这样做通常是个坏主意,而使用单个变量(即集合)是个更好的主意。然而,在你的问题中,你还不清楚你到底想做什么。。。如果试图确定"对象的名称",那么这在一般情况下肯定是不可行的。

您最好将一个标志传递给您的函数,这将允许您根据处理的是grid1还是grid2来更新逻辑。

当你使用类似$$var的东西时,PHP中就存在这种东西,其中$var将保存grid1并变成$grid1

我唯一能建议的是在字典中使用键/值对,并将数字连接到"网格"

向数组添加维度。

void CheckGrid(bool[,,] grid, int number)
{
    for (int x = 0; x <= gridXmax - 1; x++)
    {
        for (int y = 0; y <= gridYmax - 1; y++)
        {
            if(grid[number, x,y]) //this will check against grid1 or grid2, depending on int number
                //logic depends on whether it's grid1 or grid2
        }
    }
}