繁体   English   中英

C#中的动态变量名称?

[英]Dynamic variable names in C#?

(我并不需要一个实际的功能,但是我只是想知道。)

想象一下我在传递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
        }
    }
}

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

我很可能在这里遗漏了一些明显的东西-我并不是很经验丰富。

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

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
        }
    }
}  

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM