C#中的动态变量名
本文关键字:变量名 动态 | 更新日期: 2023-09-27 18:24:00
(没有实际的函数需要它,但我只是想知道。)
想象一下,在这个函数中,我传递一个bool[,]
。此bool[,]
根据情况命名为grid1
或grid2
。
我想知道我是否可以做以下事情:
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
}
}
}
根据其他语言的问题猜测,这可能是不可能的。但你永远不会知道:)
很可能我错过了一些显而易见的东西——我没有真正的经验。
您可以创建一个网格数组,然后使用数值进行检查。
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
}
}
}